diff options
author | 2016-03-01 11:34:33 -0700 | |
---|---|---|
committer | 2016-03-01 11:34:33 -0700 | |
commit | c1f0ae29e28db10c27ea7c48f7d0708b1ad48bbf (patch) | |
tree | 7f8e7d91faa0358bfd5231cb4271f7def1f6ea63 /src | |
parent | 023de5734c9862ec39fa6f9c77f4f0c2835dec4e (diff) |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/drivers/n64.cpp | 31 | ||||
-rw-r--r-- | src/mame/machine/n64.cpp | 6 |
2 files changed, 27 insertions, 10 deletions
diff --git a/src/mame/drivers/n64.cpp b/src/mame/drivers/n64.cpp index 757f87e159a..770c42a6a09 100644 --- a/src/mame/drivers/n64.cpp +++ b/src/mame/drivers/n64.cpp @@ -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, 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,0x71,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03 + 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00 }; - for (int i = 0; i < 0x8000; i += 2) + unsigned char pak_inode_table[] = { - pak[i+0] = 0x00; - pak[i+1] = 0x03; - } - memcpy(pak, pak_header, 272); + 0x01,0x71,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,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,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) diff --git a/src/mame/machine/n64.cpp b/src/mame/machine/n64.cpp index 5f0d8a6b4d2..d511124c26c 100644 --- a/src/mame/machine/n64.cpp +++ b/src/mame/machine/n64.cpp @@ -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 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; /* @@ -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); @@ -2278,7 +2278,7 @@ void n64_periphs::dd_update_bm() } 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 dd_status_reg &= ~DD_ASIC_STATUS_DREQ; |