Few miscellaneous N64 changes / improvements

Change MemPak formatting code to better document actual format
Do not adjust screen timings when VI blank video mode set
PIF reportedly only clears top bit of status byte
DD read fail needs to mask against *head* as well as track
This commit is contained in:
Happy 2016-03-01 11:34:33 -07:00
parent 023de5734c
commit c1f0ae29e2
2 changed files with 27 additions and 10 deletions

View File

@ -266,16 +266,33 @@ void n64_mess_state::mempak_format(UINT8* pak)
0xff,0xff,0xff,0xff, 0x05,0x1a,0x5f,0x13, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0xff,0xff,0xff,0xff, 0x05,0x1a,0x5f,0x13, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0x01,0xff, 0x66,0x25,0x99,0xcd, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0x01,0xff, 0x66,0x25,0x99,0xcd,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00
0x00,0x71,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03
}; };
for (int i = 0; i < 0x8000; i += 2) unsigned char pak_inode_table[] =
{ {
pak[i+0] = 0x00; 0x01,0x71,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x03, 0x00,0x03,0x00,0x03,
pak[i+1] = 0x03; 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
} 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
memcpy(pak, pak_header, 272); 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03
};
memset(pak, 0, 0x8000);
memcpy(pak, pak_header, 256);
memcpy(pak+256, pak_inode_table, 256); // Main
memcpy(pak+512, pak_inode_table, 256); // Mirror
} }
DEVICE_IMAGE_LOAD_MEMBER(n64_mess_state,n64_cart) DEVICE_IMAGE_LOAD_MEMBER(n64_mess_state,n64_cart)

View File

@ -996,7 +996,7 @@ void n64_periphs::vi_recalculate_resolution()
// DACRATE is the quarter pixel clock and period will be for a field, not a frame // DACRATE is the quarter pixel clock and period will be for a field, not a frame
attoseconds_t period = (vi_hsync & 0xfff) * (vi_vsync & 0xfff) * HZ_TO_ATTOSECONDS(DACRATE_NTSC) / 2; attoseconds_t period = (vi_hsync & 0xfff) * (vi_vsync & 0xfff) * HZ_TO_ATTOSECONDS(DACRATE_NTSC) / 2;
if (width == 0 || height == 0) if (width == 0 || height == 0 || (vi_control & 3) == 0)
{ {
vi_blank = 1; vi_blank = 1;
/* /*
@ -2060,7 +2060,7 @@ void n64_periphs::handle_pif()
} }
} }
ram[0x3f ^ BYTE4_XOR_BE(0)] = 0; ram[0x3f ^ BYTE4_XOR_BE(0)] &= ~0x80;
} }
/*printf("After:\n"); fflush(stdout); /*printf("After:\n"); fflush(stdout);
@ -2278,7 +2278,7 @@ void n64_periphs::dd_update_bm()
} }
else // dd read, BM Mode 1 else // dd read, BM Mode 1
{ {
if(((dd_track_reg & 0xFFF) == 6) && (dd_start_block == 0) && ((machine().root_device().ioport("input")->read() & 0x0100) == 0x0000)) if(((dd_track_reg & 0x1FFF) == 6) && (dd_start_block == 0) && ((machine().root_device().ioport("input")->read() & 0x0100) == 0x0000))
{ {
//only fail read LBA 12 if retail disk drive //only fail read LBA 12 if retail disk drive
dd_status_reg &= ~DD_ASIC_STATUS_DREQ; dd_status_reg &= ~DD_ASIC_STATUS_DREQ;