hng64: Implemented V-Blank register, fixes palette uploading in Samurai Shodown 1 & 2 [Angelo Salese]

This commit is contained in:
Angelo Salese 2009-11-23 21:31:03 +00:00
parent 0aa359902d
commit 40e2a10729

View File

@ -626,7 +626,7 @@ static WRITE32_HANDLER( hng64_pal_w )
// popmessage("Alpha is not zero!") ; // popmessage("Alpha is not zero!") ;
// sams64 / sams64_2 never write a palette, why not? // sams64 / sams64_2 never write a palette, why not?
if (hng64_mcu_type!=SAMSHO_MCU) //if (hng64_mcu_type!=SAMSHO_MCU)
palette_set_color(space->machine,offset,MAKE_RGB(r,g,b)); palette_set_color(space->machine,offset,MAKE_RGB(r,g,b));
} }
@ -662,7 +662,7 @@ static READ32_HANDLER( hng64_sysregs_r )
case 0x215c: return ((systime.local_time.year%100)/10); case 0x215c: return ((systime.local_time.year%100)/10);
case 0x2164: return (systime.local_time.weekday); case 0x2164: return (systime.local_time.weekday);
case 0x216c: return 0x00000010; //enables "system log reader" case 0x216c: return 0x00000010; //disables "system log reader"
case 0x217c: return 0; //RTC status? case 0x217c: return 0; //RTC status?
} }
@ -845,7 +845,7 @@ static READ32_HANDLER( racing_io_r )
static READ32_HANDLER( hng64_dualport_r ) static READ32_HANDLER( hng64_dualport_r )
{ {
// printf("dualport R %08x %08x (PC=%08x)\n", offset*4, hng64_dualport[offset], cpu_get_pc(space->cpu)); printf("dualport R %08x %08x (PC=%08x)\n", offset*4, hng64_dualport[offset], cpu_get_pc(space->cpu));
/* /*
command table: command table:
@ -873,7 +873,7 @@ static READ32_HANDLER( hng64_dualport_r )
static WRITE32_HANDLER( hng64_dualport_w ) static WRITE32_HANDLER( hng64_dualport_w )
{ {
// printf("dualport WRITE %08x %08x (PC=%08x)\n", offset*4, hng64_dualport[offset], cpu_get_pc(space->cpu)); printf("dualport WRITE %08x %08x (PC=%08x)\n", offset*4, hng64_dualport[offset], cpu_get_pc(space->cpu));
COMBINE_DATA (&hng64_dualport[offset]); COMBINE_DATA (&hng64_dualport[offset]);
} }
@ -927,6 +927,7 @@ static READ32_HANDLER( dl_r )
} }
#endif #endif
// A read at 0x20300217 ONLY happens if there are more display lists than what are readily available. // A read at 0x20300217 ONLY happens if there are more display lists than what are readily available.
// Some kind of buffering of the display lists, or 'render current buffer' write? // Some kind of buffering of the display lists, or 'render current buffer' write?
@ -941,8 +942,6 @@ static WRITE32_HANDLER( dl_control_w )
} }
#ifdef UNUSED_FUNCTION #ifdef UNUSED_FUNCTION
WRITE32_HANDLER( activate_3d_buffer ) WRITE32_HANDLER( activate_3d_buffer )
{ {
@ -978,7 +977,11 @@ static WRITE32_HANDLER( tcram_w )
static READ32_HANDLER( tcram_r ) static READ32_HANDLER( tcram_r )
{ {
// mame_printf_debug("Q1 R : %.8x %.8x\n", offset, hng64_tcram[offset]) ; // printf("Q1 R : %.8x %.8x\n", offset, hng64_tcram[offset]) ;
if(offset == 0x12)
return input_port_read(space->machine, "VBLANK");
return hng64_tcram[offset] ; return hng64_tcram[offset] ;
} }
@ -1372,6 +1375,9 @@ ADDRESS_MAP_END
static INPUT_PORTS_START( hng64 ) static INPUT_PORTS_START( hng64 )
PORT_START("VBLANK")
PORT_BIT( 0xffffffff, IP_ACTIVE_HIGH, IPT_VBLANK )
PORT_START("IPT_TEST") PORT_START("IPT_TEST")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_UNKNOWN )
@ -1447,6 +1453,9 @@ static INPUT_PORTS_START( hng64 )
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( bbust2 ) static INPUT_PORTS_START( bbust2 )
PORT_START("VBLANK")
PORT_BIT( 0xffffffff, IP_ACTIVE_HIGH, IPT_VBLANK )
PORT_START("D_IN") PORT_START("D_IN")
PORT_BIT( 0x000000ff, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x000000ff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x00000100, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_BIT( 0x00000100, IP_ACTIVE_HIGH, IPT_COIN1 )
@ -1833,7 +1842,7 @@ static MACHINE_DRIVER_START( hng64 )
MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_ADD("screen", RASTER)
MDRV_SCREEN_REFRESH_RATE(60) MDRV_SCREEN_REFRESH_RATE(60)
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) //not accurate
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32) MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
MDRV_SCREEN_SIZE(1024, 1024) MDRV_SCREEN_SIZE(1024, 1024)
MDRV_SCREEN_VISIBLE_AREA(0, 511, 16, 447) MDRV_SCREEN_VISIBLE_AREA(0, 511, 16, 447)