diff --git a/src/mame/audio/snes.c b/src/mame/audio/snes.c index 8e0a6f70302..ffd9a86837c 100644 --- a/src/mame/audio/snes.c +++ b/src/mame/audio/snes.c @@ -1241,6 +1241,8 @@ READ8_HANDLER( spc_io_r ) { switch( offset ) /* Offset is from 0x00f0 */ { + case 0x1: + return 0; //Super Kick Boxing reads port 1 and wants it to be zero. case 0x2: /* Register address */ return spc_ram[0xf2]; case 0x3: /* Register data */ @@ -1265,7 +1267,7 @@ READ8_HANDLER( spc_io_r ) } } - return 0; //Super Kick Boxing reads port 1 and wants it to be zero. + return 0xff; } WRITE8_HANDLER( spc_io_w ) diff --git a/src/mame/machine/snes.c b/src/mame/machine/snes.c index 14e5ca52285..414de6a985c 100644 --- a/src/mame/machine/snes.c +++ b/src/mame/machine/snes.c @@ -280,6 +280,21 @@ static TIMER_CALLBACK( snes_hblank_tick ) *************************************/ +static READ8_HANDLER( snes_open_bus_r ) +{ + static UINT8 recurse = 0; + UINT16 result; + + /* prevent recursion */ + if (recurse) + return 0xff; + + recurse = 1; + result = memory_read_byte_8le(space, cpu_get_pc(space->cpu)+2); //TODO: must be the LAST opcode that's fetched on the bus + recurse = 0; + return result; +} + /* * DR - Double read : address is read twice to return a 16bit value. * low - This is the low byte of a 16 or 24 bit value @@ -299,7 +314,7 @@ READ8_HANDLER( snes_r_io ) /* offset is from 0x000000 */ switch( offset ) { - /* hacks for SimCity 2000 to boot - I presume openbus emulation will fix */ + /* hacks for SimCity 2000 (J) to boot - I presume openbus emulation will fix */ case 0x221a: case 0x231c: case 0x241e: @@ -312,6 +327,9 @@ READ8_HANDLER( snes_r_io ) case 0x2016: return 2; + /* Shien The Blade Chaser / Shien's Revenge reads here instead */ + case NMITIMEN: + return snes_open_bus_r(space,0); case OAMADDL: case OAMADDH: case VMADDL: