- added working gun input for timecrs2

- POST works fine without MCFG_QUANTUM_TIME
This commit is contained in:
Michaël Banaan Ananas 2011-09-22 22:13:46 +00:00
parent 2faeca882a
commit df51e8ee35

View File

@ -21,10 +21,6 @@
- Text layer is (almost?) identical to System 22 & Super System 22. - Text layer is (almost?) identical to System 22 & Super System 22.
TODO: TODO:
- Hook up gun inputs (?) via the 2 serial latches at d00004 and d00006.
Works like this: write to d00004, then read d00004 12 times. Ditto at
d00006. This gives 24 bits of inputs (?) from the I/O board (?) or guns (?)
- There are currently no differences seen between System 23 (Time Crisis 2) and - There are currently no differences seen between System 23 (Time Crisis 2) and
Super System 23 (GP500, Final Furlong 2). These will presumably appear when Super System 23 (GP500, Final Furlong 2). These will presumably appear when
the 3D hardware is emulated. the 3D hardware is emulated.
@ -984,7 +980,8 @@ Notes:
#include "machine/nvram.h" #include "machine/nvram.h"
#define S23_BUSCLOCK (66664460/2) /* 33MHz CPU bus clock / input, somehow derived from 14.31721 MHz crystal */ #define S23_BUSCLOCK (66664460/2) /* 33MHz CPU bus clock / input, somehow derived from 14.31721 MHz crystal */
#define S23_C352CLOCK (25992000) /* 25.992MHz, from 2061 pin 9 */ #define S23_H8CLOCK (14745600)
#define S23_C352CLOCK (24576000) /* measured at 25.992MHz from 2061 pin 9 (but that sounds too highpitched) */
#define S23_VSYNC1 (59.8824) #define S23_VSYNC1 (59.8824)
#define S23_VSYNC2 (59.915) #define S23_VSYNC2 (59.915)
#define S23_HSYNC (16666150) #define S23_HSYNC (16666150)
@ -2528,13 +2525,17 @@ static INPUT_PORTS_START( s23 )
PORT_START("H8PORT") PORT_START("H8PORT")
// No idea if start is actually there, but we need buttons to pass error screens // No idea if start is actually there, but we need buttons to pass error screens
// You can go to the pcb test mode by pressing start, and it doesn't crash anymore somehow
// Use start1 to select, start1+start2 to exit, up/down to navigate
PORT_START("P1") PORT_START("P1")
PORT_BIT( 0x001, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x008, IP_ACTIVE_LOW, IPT_START1 ) // P1 A
PORT_BIT( 0xffe, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x200, IP_ACTIVE_LOW, IPT_START2 ) // P1 SEL
PORT_BIT( 0x040, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
PORT_BIT( 0xd07, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P2") PORT_START("P2")
PORT_BIT( 0x001, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0xfff, IP_ACTIVE_LOW, IPT_UNKNOWN ) // 0x100 = freeze?
PORT_BIT( 0xffe, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("TC2P0") PORT_START("TC2P0")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_COIN1 )
@ -2578,6 +2579,15 @@ static INPUT_PORTS_START( s23 )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( timecrs2 )
PORT_INCLUDE( s23 )
PORT_START("LIGHTX")
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(48) PORT_KEYDELTA(4)
PORT_START("LIGHTY")
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(64) PORT_KEYDELTA(4)
INPUT_PORTS_END
static INPUT_PORTS_START( ss23 ) static INPUT_PORTS_START( ss23 )
PORT_START("H8PORT") PORT_START("H8PORT")
@ -2719,6 +2729,26 @@ static WRITE8_HANDLER( s23_iob_p4_w )
state->m_jvssense = (data & 0x04) ? 0 : 1; state->m_jvssense = (data & 0x04) ? 0 : 1;
} }
static READ8_HANDLER( s23_gun_r )
{
UINT16 xpos = input_port_read_safe(space->machine(), "LIGHTX", 0) * 640 / 0xff;
UINT16 ypos = input_port_read_safe(space->machine(), "LIGHTY", 0) * 240 / 0xff;
// note: will need angle adjustments for accurate aiming at screen sides
switch(offset)
{
case 0: return xpos&0xff;
case 3: return xpos>>8&0xff;
case 1: return ypos&0xff;
case 4: return ypos>>8&0xff;
case 2: return ypos&0xff;
case 5: return ypos>>8&0xff;
default: break;
}
return 0;
}
static READ8_HANDLER(iob_r) static READ8_HANDLER(iob_r)
{ {
return space->machine().rand(); return space->machine().rand();
@ -2730,6 +2760,7 @@ static ADDRESS_MAP_START( s23iobrdmap, AS_PROGRAM, 8 )
AM_RANGE(0x6000, 0x6000) AM_READ_PORT("TC2P0") // 0-1 = coin 0-3 = coin connect, 0-5 = test 0-6 = down select, 0-7 = up select, 0-8 = enter AM_RANGE(0x6000, 0x6000) AM_READ_PORT("TC2P0") // 0-1 = coin 0-3 = coin connect, 0-5 = test 0-6 = down select, 0-7 = up select, 0-8 = enter
AM_RANGE(0x6001, 0x6001) AM_READ_PORT("TC2P1") // 1-1 = gun trigger 1-2 = foot pedal AM_RANGE(0x6001, 0x6001) AM_READ_PORT("TC2P1") // 1-1 = gun trigger 1-2 = foot pedal
AM_RANGE(0x6002, 0x6003) AM_READ( iob_r ) AM_RANGE(0x6002, 0x6003) AM_READ( iob_r )
AM_RANGE(0x6002, 0x6003) AM_NOP
AM_RANGE(0x6004, 0x6005) AM_WRITENOP AM_RANGE(0x6004, 0x6005) AM_WRITENOP
AM_RANGE(0x6006, 0x6007) AM_NOP AM_RANGE(0x6006, 0x6007) AM_NOP
AM_RANGE(0x7000, 0x700f) AM_READ( iob_r ) AM_RANGE(0x7000, 0x700f) AM_READ( iob_r )
@ -2737,7 +2768,19 @@ static ADDRESS_MAP_START( s23iobrdmap, AS_PROGRAM, 8 )
AM_RANGE(0xc000, 0xf7ff) AM_RAM AM_RANGE(0xc000, 0xf7ff) AM_RAM
ADDRESS_MAP_END ADDRESS_MAP_END
// gorgon map static ADDRESS_MAP_START( timecrs2iobrdmap, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_ROM AM_REGION("ioboard", 0)
AM_RANGE(0x6000, 0x6000) AM_READ_PORT("TC2P0")
AM_RANGE(0x6001, 0x6001) AM_READ_PORT("TC2P1")
AM_RANGE(0x6002, 0x6003) AM_READ( iob_r ) AM_WRITENOP
AM_RANGE(0x6002, 0x6003) AM_NOP
AM_RANGE(0x6004, 0x6005) AM_WRITENOP
AM_RANGE(0x6006, 0x6007) AM_NOP
AM_RANGE(0x7000, 0x700f) AM_READ( s23_gun_r )
AM_RANGE(0xc000, 0xf7ff) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( gorgoniobrdmap, AS_PROGRAM, 8 ) static ADDRESS_MAP_START( gorgoniobrdmap, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_ROM AM_REGION("ioboard", 0) AM_RANGE(0x0000, 0x1fff) AM_ROM AM_REGION("ioboard", 0)
AM_RANGE(0x6000, 0x6000) AM_READ_PORT("RRP0") // 0-5 = start AM_RANGE(0x6000, 0x6000) AM_READ_PORT("RRP0") // 0-5 = start
@ -2847,12 +2890,12 @@ static MACHINE_CONFIG_START( gorgon, namcos23_state )
MCFG_CPU_PROGRAM_MAP(gorgon_map) MCFG_CPU_PROGRAM_MAP(gorgon_map)
MCFG_CPU_VBLANK_INT("screen", s23_interrupt) MCFG_CPU_VBLANK_INT("screen", s23_interrupt)
MCFG_CPU_ADD("audiocpu", H83002, 14745600 ) MCFG_CPU_ADD("audiocpu", H83002, S23_H8CLOCK )
MCFG_CPU_PROGRAM_MAP( s23h8rwmap ) MCFG_CPU_PROGRAM_MAP( s23h8rwmap )
MCFG_CPU_IO_MAP( s23h8iomap ) MCFG_CPU_IO_MAP( s23h8iomap )
MCFG_CPU_VBLANK_INT("screen", irq1_line_pulse) MCFG_CPU_VBLANK_INT("screen", irq1_line_pulse)
MCFG_CPU_ADD("ioboard", H83334, 14745600 ) MCFG_CPU_ADD("ioboard", H83334, S23_H8CLOCK )
MCFG_CPU_PROGRAM_MAP( gorgoniobrdmap ) MCFG_CPU_PROGRAM_MAP( gorgoniobrdmap )
MCFG_CPU_IO_MAP( s23iobrdiomap ) MCFG_CPU_IO_MAP( s23iobrdiomap )
@ -2893,17 +2936,15 @@ static MACHINE_CONFIG_START( s23, namcos23_state )
MCFG_CPU_PROGRAM_MAP(ss23_map) MCFG_CPU_PROGRAM_MAP(ss23_map)
MCFG_CPU_VBLANK_INT("screen", s23_interrupt) MCFG_CPU_VBLANK_INT("screen", s23_interrupt)
MCFG_CPU_ADD("audiocpu", H83002, 14745600 ) MCFG_CPU_ADD("audiocpu", H83002, S23_H8CLOCK )
MCFG_CPU_PROGRAM_MAP( s23h8rwmap ) MCFG_CPU_PROGRAM_MAP( s23h8rwmap )
MCFG_CPU_IO_MAP( s23h8iomap ) MCFG_CPU_IO_MAP( s23h8iomap )
MCFG_CPU_VBLANK_INT("screen", irq1_line_pulse) MCFG_CPU_VBLANK_INT("screen", irq1_line_pulse)
MCFG_CPU_ADD("ioboard", H83334, 14745600 ) MCFG_CPU_ADD("ioboard", H83334, S23_H8CLOCK )
MCFG_CPU_PROGRAM_MAP( s23iobrdmap ) MCFG_CPU_PROGRAM_MAP( s23iobrdmap )
MCFG_CPU_IO_MAP( s23iobrdiomap ) MCFG_CPU_IO_MAP( s23iobrdiomap )
MCFG_QUANTUM_TIME(attotime::from_hz(60*18000)) // higher than 60*20000 causes timecrs2 crash after power-on test $1e
MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(S23_VSYNC1) MCFG_SCREEN_REFRESH_RATE(S23_VSYNC1)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // Not in any way accurate MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // Not in any way accurate
@ -2939,13 +2980,11 @@ static MACHINE_CONFIG_START( ss23, namcos23_state )
MCFG_CPU_PROGRAM_MAP(ss23_map) MCFG_CPU_PROGRAM_MAP(ss23_map)
MCFG_CPU_VBLANK_INT("screen", s23_interrupt) MCFG_CPU_VBLANK_INT("screen", s23_interrupt)
MCFG_CPU_ADD("audiocpu", H83002, 14745600 ) MCFG_CPU_ADD("audiocpu", H83002, S23_H8CLOCK )
MCFG_CPU_PROGRAM_MAP( s23h8rwmap ) MCFG_CPU_PROGRAM_MAP( s23h8rwmap )
MCFG_CPU_IO_MAP( s23h8noiobmap ) MCFG_CPU_IO_MAP( s23h8noiobmap )
MCFG_CPU_VBLANK_INT("screen", irq1_line_pulse) MCFG_CPU_VBLANK_INT("screen", irq1_line_pulse)
MCFG_QUANTUM_TIME(attotime::from_hz(60*18000)) // higher than 60*20000 causes timecrs2 crash after power-on test $1e
MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(S23_VSYNC1) MCFG_SCREEN_REFRESH_RATE(S23_VSYNC1)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // Not in any way accurate MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // Not in any way accurate
@ -2979,7 +3018,7 @@ static MACHINE_CONFIG_DERIVED( ss23io, ss23 )
MCFG_CPU_MODIFY("audiocpu") MCFG_CPU_MODIFY("audiocpu")
MCFG_CPU_IO_MAP( s23h8iomap ) MCFG_CPU_IO_MAP( s23h8iomap )
MCFG_CPU_ADD("ioboard", H83334, 14745600 ) MCFG_CPU_ADD("ioboard", H83334, S23_H8CLOCK )
MCFG_CPU_PROGRAM_MAP( s23iobrdmap ) MCFG_CPU_PROGRAM_MAP( s23iobrdmap )
MCFG_CPU_IO_MAP( s23iobrdiomap ) MCFG_CPU_IO_MAP( s23iobrdiomap )
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -2992,11 +3031,17 @@ static MACHINE_CONFIG_DERIVED( ss23e2, ss23 )
MCFG_CPU_MODIFY("audiocpu") MCFG_CPU_MODIFY("audiocpu")
MCFG_CPU_IO_MAP( s23h8iomap ) MCFG_CPU_IO_MAP( s23h8iomap )
MCFG_CPU_ADD("ioboard", H83334, 14745600 ) MCFG_CPU_ADD("ioboard", H83334, S23_H8CLOCK )
MCFG_CPU_PROGRAM_MAP( s23iobrdmap ) MCFG_CPU_PROGRAM_MAP( s23iobrdmap )
MCFG_CPU_IO_MAP( s23iobrdiomap ) MCFG_CPU_IO_MAP( s23iobrdiomap )
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( timecrs2, s23 )
MCFG_CPU_MODIFY("ioboard")
MCFG_CPU_PROGRAM_MAP( timecrs2iobrdmap )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( gmen, s23 ) static MACHINE_CONFIG_DERIVED( gmen, s23 )
MCFG_CPU_MODIFY("maincpu") MCFG_CPU_MODIFY("maincpu")
@ -3886,22 +3931,24 @@ ROM_START( crszonea )
ROM_END ROM_END
/* Games */ /* Games */
GAME( 1997, rapidrvr, 0, gorgon, gorgon, ss23, ROT0, "Namco", "Rapid River (RD3 Ver. C)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) #define GAME_FLAGS (GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND)
GAME( 1997, rapidrvr2,rapidrvr,gorgon,gorgon, ss23, ROT0, "Namco", "Rapid River (RD2 Ver. C)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) // YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MNTR, COMPANY, FULLNAME, FLAGS
GAME( 1997, finlflng, 0, gorgon, gorgon, ss23, ROT0, "Namco", "Final Furlong (FF2 Ver. A)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) GAME( 1997, rapidrvr, 0, gorgon, gorgon, ss23, ROT0, "Namco", "Rapid River (RD3 Ver. C)", GAME_FLAGS )
GAME( 1997, downhill, 0, s23, s23, ss23, ROT0, "Namco", "Downhill Bikers (DH3 Ver. A)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) GAME( 1997, rapidrvr2,rapidrvr, gorgon, gorgon, ss23, ROT0, "Namco", "Rapid River (RD2 Ver. C)", GAME_FLAGS )
GAME( 1997, motoxgo, 0, s23, s23, ss23, ROT0, "Namco", "Motocross Go! (MG3 Ver. A)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) GAME( 1997, finlflng, 0, gorgon, gorgon, ss23, ROT0, "Namco", "Final Furlong (FF2 Ver. A)", GAME_FLAGS )
GAME( 1997, motoxgoa, motoxgo, s23, s23, ss23, ROT0, "Namco", "Motocross Go! (MG2 Ver. A)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) GAME( 1997, downhill, 0, s23, s23, ss23, ROT0, "Namco", "Downhill Bikers (DH3 Ver. A)", GAME_FLAGS )
GAME( 1997, timecrs2, 0, s23, s23, ss23, ROT0, "Namco", "Time Crisis 2 (TSS3 Ver. B)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) GAME( 1997, motoxgo, 0, s23, s23, ss23, ROT0, "Namco", "Motocross Go! (MG3 Ver. A)", GAME_FLAGS )
GAME( 1997, timecrs2b,timecrs2, s23, s23, ss23, ROT0, "Namco", "Time Crisis 2 (TSS2 Ver. B)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) GAME( 1997, motoxgoa, motoxgo, s23, s23, ss23, ROT0, "Namco", "Motocross Go! (MG2 Ver. A)", GAME_FLAGS )
GAME( 1997, timecrs2c,timecrs2, ss23io, ss23, ss23, ROT0, "Namco", "Time Crisis 2 (TSS4 Ver. A)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) GAME( 1997, timecrs2, 0, timecrs2, timecrs2, ss23, ROT0, "Namco", "Time Crisis 2 (TSS3 Ver. B)", GAME_FLAGS )
GAME( 1998, panicprk, 0, s23, s23, ss23, ROT0, "Namco", "Panic Park (PNP2 Ver. A)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) GAME( 1997, timecrs2b,timecrs2, timecrs2, timecrs2, ss23, ROT0, "Namco", "Time Crisis 2 (TSS2 Ver. B)", GAME_FLAGS )
GAME( 1998, gunwars, 0, gmen, ss23, ss23, ROT0, "Namco", "Gunmen Wars (GM1 Ver. A)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) GAME( 1997, timecrs2c,timecrs2, ss23io, ss23, ss23, ROT0, "Namco", "Time Crisis 2 (TSS4 Ver. A)", GAME_FLAGS )
GAME( 1998, raceon, 0, gmen, ss23, ss23, ROT0, "Namco", "Race On! (RO2 Ver. A)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) GAME( 1998, panicprk, 0, s23, s23, ss23, ROT0, "Namco", "Panic Park (PNP2 Ver. A)", GAME_FLAGS )
GAME( 1998, 500gp, 0, ss23, ss23, ss23, ROT0, "Namco", "500 GP (5GP3 Ver. C)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) GAME( 1998, gunwars, 0, gmen, ss23, ss23, ROT0, "Namco", "Gunmen Wars (GM1 Ver. A)", GAME_FLAGS )
GAME( 1999, finfurl2, 0, gmen, ss23, ss23, ROT0, "Namco", "Final Furlong 2 (World)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) GAME( 1998, raceon, 0, gmen, ss23, ss23, ROT0, "Namco", "Race On! (RO2 Ver. A)", GAME_FLAGS )
GAME( 1999, finfurl2j,finfurl2, gmen, ss23, ss23, ROT0, "Namco", "Final Furlong 2 (Japan)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) GAME( 1998, 500gp, 0, ss23, ss23, ss23, ROT0, "Namco", "500 GP (5GP3 Ver. C)", GAME_FLAGS )
GAME( 2000, crszone, 0, ss23e2, ss23, ss23, ROT0, "Namco", "Crisis Zone (CSZO3 Ver. B)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) GAME( 1999, finfurl2, 0, gmen, ss23, ss23, ROT0, "Namco", "Final Furlong 2 (World)", GAME_FLAGS )
GAME( 2000, crszonea, crszone,ss23e2, ss23, ss23, ROT0, "Namco", "Crisis Zone (CSZO2 Ver. A)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) GAME( 1999, finfurl2j,finfurl2, gmen, ss23, ss23, ROT0, "Namco", "Final Furlong 2 (Japan)", GAME_FLAGS )
GAME( 2000, crszoneb, crszone,ss23e2, ss23, ss23, ROT0, "Namco", "Crisis Zone (CSZO4 Ver. B)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) GAME( 2000, crszone, 0, ss23e2, ss23, ss23, ROT0, "Namco", "Crisis Zone (CSZO3 Ver. B)", GAME_FLAGS )
GAME( 2000, crszonea, crszone, ss23e2, ss23, ss23, ROT0, "Namco", "Crisis Zone (CSZO2 Ver. A)", GAME_FLAGS )
GAME( 2000, crszoneb, crszone, ss23e2, ss23, ss23, ROT0, "Namco", "Crisis Zone (CSZO4 Ver. B)", GAME_FLAGS )