summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Happy <Happy-yappH@users.noreply.github.com>2016-03-01 11:34:33 -0700
committer Happy <Happy-yappH@users.noreply.github.com>2016-03-01 11:34:33 -0700
commitc1f0ae29e28db10c27ea7c48f7d0708b1ad48bbf (patch)
tree7f8e7d91faa0358bfd5231cb4271f7def1f6ea63 /src
parent023de5734c9862ec39fa6f9c77f4f0c2835dec4e (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.cpp31
-rw-r--r--src/mame/machine/n64.cpp6
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;