Separate state class for CPS2 (nw)

This commit is contained in:
AJR 2018-05-22 10:29:42 -04:00
parent 9abe0fb272
commit 447cda5667
6 changed files with 622 additions and 623 deletions

View File

@ -3400,8 +3400,6 @@ MACHINE_CONFIG_START(cps_state::cps1_10MHz)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1)
MCFG_PALETTE_ADD("palette", 0xc00)
MCFG_VIDEO_START_OVERRIDE(cps_state, cps1)
/* sound hardware */
SPEAKER(config, "mono").front_center();

View File

@ -655,7 +655,7 @@ Stephh's inputs notes (based on some tests on the "parent" set) :
*
*************************************/
TIMER_DEVICE_CALLBACK_MEMBER(cps_state::cps2_interrupt)
TIMER_DEVICE_CALLBACK_MEMBER(cps2_state::cps2_interrupt)
{
/* 2 is vblank, 4 is some sort of scanline interrupt, 6 is both at the same time. */
if (param == 0)
@ -713,7 +713,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(cps_state::cps2_interrupt)
*
*************************************/
WRITE16_MEMBER( cps_state::cps2_eeprom_port_w )
WRITE16_MEMBER( cps2_state::cps2_eeprom_port_w )
{
if (ACCESSING_BITS_8_15)
{
@ -790,11 +790,9 @@ WRITE16_MEMBER( cps_state::cps2_eeprom_port_w )
*
*************************************/
TIMER_CALLBACK_MEMBER(cps_state::cps2_update_digital_volume)
TIMER_CALLBACK_MEMBER(cps2_state::cps2_update_digital_volume)
{
int vol_button_state;
vol_button_state = ioport("DIGITALVOL")->read();
int vol_button_state = ioport("DIGITALVOL")->read();
if (vol_button_state & 0x01) m_cps2digitalvolumelevel -= 1;
if (vol_button_state & 0x02) m_cps2digitalvolumelevel += 1;
@ -802,11 +800,11 @@ TIMER_CALLBACK_MEMBER(cps_state::cps2_update_digital_volume)
if (m_cps2digitalvolumelevel > 39) m_cps2digitalvolumelevel = 39;
if (m_cps2digitalvolumelevel < 0) m_cps2digitalvolumelevel = 0;
machine().device<qsound_device>("qsound")->set_output_gain(0, m_cps2digitalvolumelevel / 39.0);
machine().device<qsound_device>("qsound")->set_output_gain(1, m_cps2digitalvolumelevel / 39.0);
m_qsound->set_output_gain(0, m_cps2digitalvolumelevel / 39.0);
m_qsound->set_output_gain(1, m_cps2digitalvolumelevel / 39.0);
}
READ16_MEMBER(cps_state::cps2_qsound_volume_r)
READ16_MEMBER(cps2_state::cps2_qsound_volume_r)
{
static const uint16_t cps2_vol_states[40] =
{
@ -840,12 +838,12 @@ READ16_MEMBER(cps_state::cps2_qsound_volume_r)
*
*************************************/
READ16_MEMBER(cps_state::kludge_r)
READ16_MEMBER(cps2_state::kludge_r)
{
return 0xffff;
}
READ16_MEMBER(cps_state::joy_or_paddle_r)
READ16_MEMBER(cps2_state::joy_or_paddle_r)
{
if (m_readpaddle != 0)
{
@ -857,7 +855,7 @@ READ16_MEMBER(cps_state::joy_or_paddle_r)
}
}
READ16_MEMBER(cps_state::joy_or_paddle_ecofghtr_r)
READ16_MEMBER(cps2_state::joy_or_paddle_ecofghtr_r)
{
if (m_readpaddle == 0 || (m_io_in1->read() & 0x10) == 0x10) // ignore bit if spinner not enabled
{
@ -926,64 +924,64 @@ READ16_MEMBER(cps_state::joy_or_paddle_ecofghtr_r)
*
*************************************/
void cps_state::cps2_map(address_map &map)
void cps2_state::cps2_map(address_map &map)
{
map(0x000000, 0x3fffff).rom(); /* 68000 ROM */
map(0x400000, 0x40000b).ram().share("output"); /* CPS2 object output */
map(0x618000, 0x619fff).rw(this, FUNC(cps_state::qsound_sharedram1_r), FUNC(cps_state::qsound_sharedram1_w)); /* Q RAM */
map(0x618000, 0x619fff).rw(this, FUNC(cps2_state::qsound_sharedram1_r), FUNC(cps2_state::qsound_sharedram1_w)); /* Q RAM */
map(0x660000, 0x663fff).ram(); /* When bit 14 of 0x804030 equals 0 this space is available. Many games store highscores and other info here if available. */
map(0x662000, 0x662001).ram(); /* Network adapter related, accessed in SSF2TB */
map(0x662008, 0x662009).ram(); /* Network adapter related, accessed in SSF2TB */
map(0x662020, 0x662021).ram(); /* Network adapter related, accessed in SSF2TB */
map(0x664000, 0x664001).ram(); /* Unknown - Only used if 0x660000-0x663fff available (could be RAM enable?) */
map(0x700000, 0x701fff).w(this, FUNC(cps_state::cps2_objram1_w)).share("objram1"); /* Object RAM, no game seems to use it directly */
map(0x708000, 0x709fff).mirror(0x006000).rw(this, FUNC(cps_state::cps2_objram2_r), FUNC(cps_state::cps2_objram2_w)).share("objram2"); /* Object RAM */
map(0x800100, 0x80013f).w(this, FUNC(cps_state::cps1_cps_a_w)).share("cps_a_regs"); /* mirror (sfa) */
map(0x800140, 0x80017f).rw(this, FUNC(cps_state::cps1_cps_b_r), FUNC(cps_state::cps1_cps_b_w)).share("cps_b_regs"); /* mirror (sfa) */
map(0x700000, 0x701fff).w(this, FUNC(cps2_state::cps2_objram1_w)).share("objram1"); /* Object RAM, no game seems to use it directly */
map(0x708000, 0x709fff).mirror(0x006000).rw(this, FUNC(cps2_state::cps2_objram2_r), FUNC(cps2_state::cps2_objram2_w)).share("objram2"); /* Object RAM */
map(0x800100, 0x80013f).w(this, FUNC(cps2_state::cps1_cps_a_w)).share("cps_a_regs"); /* mirror (sfa) */
map(0x800140, 0x80017f).rw(this, FUNC(cps2_state::cps1_cps_b_r), FUNC(cps2_state::cps1_cps_b_w)).share("cps_b_regs"); /* mirror (sfa) */
map(0x804000, 0x804001).portr("IN0"); /* IN0 */
map(0x804010, 0x804011).portr("IN1"); /* IN1 */
map(0x804020, 0x804021).portr("IN2"); /* IN2 + EEPROM */
map(0x804030, 0x804031).r(this, FUNC(cps_state::cps2_qsound_volume_r)); /* Master volume. Also when bit 14=0 addon memory is present, when bit 15=0 network adapter present. */
map(0x804040, 0x804041).w(this, FUNC(cps_state::cps2_eeprom_port_w)); /* EEPROM */
map(0x804030, 0x804031).r(this, FUNC(cps2_state::cps2_qsound_volume_r)); /* Master volume. Also when bit 14=0 addon memory is present, when bit 15=0 network adapter present. */
map(0x804040, 0x804041).w(this, FUNC(cps2_state::cps2_eeprom_port_w)); /* EEPROM */
map(0x8040a0, 0x8040a1).nopw(); /* Unknown (reset once on startup) */
map(0x8040b0, 0x8040b3).r(this, FUNC(cps_state::kludge_r)); /* unknown (xmcotaj hangs if this is 0) */
map(0x8040e0, 0x8040e1).w(this, FUNC(cps_state::cps2_objram_bank_w)); /* bit 0 = Object ram bank swap */
map(0x804100, 0x80413f).w(this, FUNC(cps_state::cps1_cps_a_w)).share("cps_a_regs"); /* CPS-A custom */
map(0x804140, 0x80417f).rw(this, FUNC(cps_state::cps1_cps_b_r), FUNC(cps_state::cps1_cps_b_w)); /* CPS-B custom */
map(0x900000, 0x92ffff).ram().w(this, FUNC(cps_state::cps1_gfxram_w)).share("gfxram"); /* Video RAM */
map(0x8040b0, 0x8040b3).r(this, FUNC(cps2_state::kludge_r)); /* unknown (xmcotaj hangs if this is 0) */
map(0x8040e0, 0x8040e1).w(this, FUNC(cps2_state::cps2_objram_bank_w)); /* bit 0 = Object ram bank swap */
map(0x804100, 0x80413f).w(this, FUNC(cps2_state::cps1_cps_a_w)).share("cps_a_regs"); /* CPS-A custom */
map(0x804140, 0x80417f).rw(this, FUNC(cps2_state::cps1_cps_b_r), FUNC(cps2_state::cps1_cps_b_w)); /* CPS-B custom */
map(0x900000, 0x92ffff).ram().w(this, FUNC(cps2_state::cps1_gfxram_w)).share("gfxram"); /* Video RAM */
map(0xff0000, 0xffffff).ram(); /* RAM */
}
void cps_state::decrypted_opcodes_map(address_map &map)
void cps2_state::decrypted_opcodes_map(address_map &map)
{
map(0x000000, 0x3fffff).rom().share("decrypted_opcodes"); /* 68000 ROM */
}
void cps_state::dead_cps2_map(address_map &map)
void cps2_state::dead_cps2_map(address_map &map)
{
map(0x000000, 0x3fffff).rom(); /* 68000 ROM */
map(0x400000, 0x40000b).ram().share("output"); /* CPS2 object output */
map(0x618000, 0x619fff).rw(this, FUNC(cps_state::qsound_sharedram1_r), FUNC(cps_state::qsound_sharedram1_w)); /* Q RAM */
map(0x618000, 0x619fff).rw(this, FUNC(cps2_state::qsound_sharedram1_r), FUNC(cps2_state::qsound_sharedram1_w)); /* Q RAM */
map(0x660000, 0x663fff).ram(); /* When bit 14 of 0x804030 equals 0 this space is available. Many games store highscores and other info here if available. */
map(0x662000, 0x662001).ram(); /* Network adapter related, accessed in SSF2TB */
map(0x662008, 0x662009).ram(); /* Network adapter related, accessed in SSF2TB */
map(0x662020, 0x662021).ram(); /* Network adapter related, accessed in SSF2TB */
map(0x664000, 0x664001).ram(); /* Unknown - Only used if 0x660000-0x663fff available (could be RAM enable?) */
map(0x700000, 0x701fff).w(this, FUNC(cps_state::cps2_objram1_w)).share("objram1"); /* Object RAM, no game seems to use it directly */
map(0x708000, 0x709fff).mirror(0x006000).rw(this, FUNC(cps_state::cps2_objram2_r), FUNC(cps_state::cps2_objram2_w)).share("objram2"); /* Object RAM */
map(0x800100, 0x80013f).w(this, FUNC(cps_state::cps1_cps_a_w)).share("cps_a_regs"); /* mirror (sfa) */
map(0x800140, 0x80017f).rw(this, FUNC(cps_state::cps1_cps_b_r), FUNC(cps_state::cps1_cps_b_w)).share("cps_b_regs"); /* mirror (sfa) */
map(0x700000, 0x701fff).w(this, FUNC(cps2_state::cps2_objram1_w)).share("objram1"); /* Object RAM, no game seems to use it directly */
map(0x708000, 0x709fff).mirror(0x006000).rw(this, FUNC(cps2_state::cps2_objram2_r), FUNC(cps2_state::cps2_objram2_w)).share("objram2"); /* Object RAM */
map(0x800100, 0x80013f).w(this, FUNC(cps2_state::cps1_cps_a_w)).share("cps_a_regs"); /* mirror (sfa) */
map(0x800140, 0x80017f).rw(this, FUNC(cps2_state::cps1_cps_b_r), FUNC(cps2_state::cps1_cps_b_w)).share("cps_b_regs"); /* mirror (sfa) */
map(0x804000, 0x804001).portr("IN0"); /* IN0 */
map(0x804010, 0x804011).portr("IN1"); /* IN1 */
map(0x804020, 0x804021).portr("IN2"); /* IN2 + EEPROM */
map(0x804030, 0x804031).r(this, FUNC(cps_state::cps2_qsound_volume_r)); /* Master volume. Also when bit 14=0 addon memory is present, when bit 15=0 network adapter present. */
map(0x804040, 0x804041).w(this, FUNC(cps_state::cps2_eeprom_port_w)); /* EEPROM */
map(0x804030, 0x804031).r(this, FUNC(cps2_state::cps2_qsound_volume_r)); /* Master volume. Also when bit 14=0 addon memory is present, when bit 15=0 network adapter present. */
map(0x804040, 0x804041).w(this, FUNC(cps2_state::cps2_eeprom_port_w)); /* EEPROM */
map(0x8040a0, 0x8040a1).nopw(); /* Unknown (reset once on startup) */
map(0x8040b0, 0x8040b3).r(this, FUNC(cps_state::kludge_r)); /* unknown (xmcotaj hangs if this is 0) */
map(0x8040e0, 0x8040e1).w(this, FUNC(cps_state::cps2_objram_bank_w)); /* bit 0 = Object ram bank swap */
map(0x804100, 0x80413f).w(this, FUNC(cps_state::cps1_cps_a_w)).share("cps_a_regs"); /* CPS-A custom */
map(0x804140, 0x80417f).rw(this, FUNC(cps_state::cps1_cps_b_r), FUNC(cps_state::cps1_cps_b_w)); /* CPS-B custom */
map(0x900000, 0x92ffff).ram().w(this, FUNC(cps_state::cps1_gfxram_w)).share("gfxram"); /* Video RAM */
map(0x8040b0, 0x8040b3).r(this, FUNC(cps2_state::kludge_r)); /* unknown (xmcotaj hangs if this is 0) */
map(0x8040e0, 0x8040e1).w(this, FUNC(cps2_state::cps2_objram_bank_w)); /* bit 0 = Object ram bank swap */
map(0x804100, 0x80413f).w(this, FUNC(cps2_state::cps1_cps_a_w)).share("cps_a_regs"); /* CPS-A custom */
map(0x804140, 0x80417f).rw(this, FUNC(cps2_state::cps1_cps_b_r), FUNC(cps2_state::cps1_cps_b_w)); /* CPS-B custom */
map(0x900000, 0x92ffff).ram().w(this, FUNC(cps2_state::cps1_gfxram_w)).share("gfxram"); /* Video RAM */
map(0xff0000, 0xffffef).ram(); /* RAM */
map(0xfffff0, 0xfffffb).ram().share("output"); /* CPS2 output */
map(0xfffffc, 0xffffff).ram();
@ -1297,26 +1295,26 @@ INPUT_PORTS_END
*
*************************************/
MACHINE_START_MEMBER(cps_state,cps2)
MACHINE_START_MEMBER(cps2_state,cps2)
{
if (m_audiocpu != nullptr) // gigaman2 has an AT89C4051 (8051) MCU as an audio cpu, no qsound.
membank("bank1")->configure_entries(0, (QSOUND_SIZE - 0x10000) / 0x4000, memregion("audiocpu")->base() + 0x10000, 0x4000);
}
MACHINE_CONFIG_START(cps_state::cps2)
MACHINE_CONFIG_START(cps2_state::cps2)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000))
MCFG_DEVICE_PROGRAM_MAP(cps2_map)
MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", cps_state, cps2_interrupt, "screen", 0, 1)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", cps2_state, cps2_interrupt, "screen", 0, 1)
MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(8'000'000))
MCFG_DEVICE_PROGRAM_MAP(qsound_sub_map)
MCFG_DEVICE_PERIODIC_INT_DRIVER(cps_state, irq0_line_hold, 250) // measured
MCFG_DEVICE_PERIODIC_INT_DRIVER(cps2_state, irq0_line_hold, 250) // measured
MCFG_MACHINE_START_OVERRIDE(cps_state, cps2)
MCFG_MACHINE_START_OVERRIDE(cps2_state, cps2)
MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
@ -1324,15 +1322,13 @@ MACHINE_CONFIG_START(cps_state::cps2)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
MCFG_SCREEN_RAW_PARAMS(CPS_PIXEL_CLOCK, CPS_HTOTAL, CPS_HBEND, CPS_HBSTART, CPS_VTOTAL, CPS_VBEND, CPS_VBSTART)
MCFG_SCREEN_UPDATE_DRIVER(cps_state, screen_update_cps1)
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cps_state, screen_vblank_cps1))
MCFG_SCREEN_UPDATE_DRIVER(cps2_state, screen_update_cps1)
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cps2_state, screen_vblank_cps1))
MCFG_SCREEN_PALETTE("palette")
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1)
MCFG_PALETTE_ADD("palette", 0xc00)
MCFG_VIDEO_START_OVERRIDE(cps_state, cps2)
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
@ -1343,14 +1339,14 @@ MACHINE_CONFIG_START(cps_state::cps2)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(cps_state::dead_cps2)
MACHINE_CONFIG_START(cps2_state::dead_cps2)
cps2(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(dead_cps2_map)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(cps_state::gigaman2)
MACHINE_CONFIG_START(cps2_state::gigaman2)
cps2(config);
MCFG_DEVICE_REMOVE("audiocpu")
@ -9836,26 +9832,26 @@ ROM_END
*
*************************************/
void cps_state::init_digital_volume()
void cps2_state::init_digital_volume()
{
m_cps2digitalvolumelevel = 39; /* maximum */
m_cps2disabledigitalvolume = 0;
/* create a timer to update our volume state from the fake switches - read it every 6 frames or so to enable some granularity */
m_digital_volume_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cps_state::cps2_update_digital_volume),this));
m_digital_volume_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cps2_state::cps2_update_digital_volume),this));
m_digital_volume_timer->adjust(attotime::from_msec(100), 0, attotime::from_msec(100));
}
void cps_state::init_cps2()
void cps2_state::init_cps2()
{
/* Decrypt the game - see machine/cps2crypt.cpp */
init_cps2crypt();
init_cps2nc();
}
void cps_state::init_cps2nc()
void cps2_state::init_cps2nc()
{
/* Initialize some video elements */
init_cps2_video();
@ -9868,7 +9864,7 @@ void cps_state::init_cps2nc()
}
void cps_state::init_ssf2tb()
void cps2_state::init_ssf2tb()
{
init_cps2();
@ -9880,7 +9876,7 @@ void cps_state::init_ssf2tb()
}
void cps_state::init_pzloop2()
void cps2_state::init_pzloop2()
{
init_cps2();
@ -9889,10 +9885,10 @@ void cps_state::init_pzloop2()
save_item(NAME(m_readpaddle));
m_maincpu->space(AS_PROGRAM).install_read_handler(0x804000, 0x804001, read16_delegate(FUNC(cps_state::joy_or_paddle_r), this));
m_maincpu->space(AS_PROGRAM).install_read_handler(0x804000, 0x804001, read16_delegate(FUNC(cps2_state::joy_or_paddle_r), this));
}
void cps_state::init_singbrd()
void cps2_state::init_singbrd()
{
init_cps2();
@ -9901,18 +9897,18 @@ void cps_state::init_singbrd()
m_digital_volume_timer->adjust(attotime::never, 0, attotime::never);
}
READ16_MEMBER( cps_state::gigaman2_dummyqsound_r )
READ16_MEMBER( cps2_state::gigaman2_dummyqsound_r )
{
return m_gigaman2_dummyqsound_ram[offset];
}
WRITE16_MEMBER( cps_state::gigaman2_dummyqsound_w )
WRITE16_MEMBER( cps2_state::gigaman2_dummyqsound_w )
{
m_gigaman2_dummyqsound_ram[offset] = data;
}
/* rearrange the graphics data into the normal order */
void cps_state::gigaman2_gfx_reorder()
void cps2_state::gigaman2_gfx_reorder()
{
int i;
int length = memregion( "gfx" )->bytes();
@ -9926,7 +9922,7 @@ void cps_state::gigaman2_gfx_reorder()
}
}
void cps_state::init_gigaman2()
void cps2_state::init_gigaman2()
{
address_space &space = m_maincpu->space(AS_PROGRAM);
@ -9937,7 +9933,7 @@ void cps_state::init_gigaman2()
m_gigaman2_dummyqsound_ram = std::make_unique<uint16_t[]>(0x20000 / 2);
save_pointer(NAME(m_gigaman2_dummyqsound_ram.get()), 0x20000 / 2);
space.install_readwrite_handler(0x618000, 0x619fff, read16_delegate(FUNC(cps_state::gigaman2_dummyqsound_r),this), write16_delegate(FUNC(cps_state::gigaman2_dummyqsound_w), this)); // no qsound..
space.install_readwrite_handler(0x618000, 0x619fff, read16_delegate(FUNC(cps2_state::gigaman2_dummyqsound_r),this), write16_delegate(FUNC(cps2_state::gigaman2_dummyqsound_w), this)); // no qsound..
memcpy(m_decrypted_opcodes, memregion("maincpu")->base()+0x200000, 0x200000);
@ -9945,7 +9941,7 @@ void cps_state::init_gigaman2()
m_digital_volume_timer->adjust(attotime::never, 0, attotime::never);
}
void cps_state::init_ecofghtr()
void cps2_state::init_ecofghtr()
{
init_cps2();
@ -9954,7 +9950,7 @@ void cps_state::init_ecofghtr()
save_item(NAME(m_readpaddle));
m_maincpu->space(AS_PROGRAM).install_read_handler(0x804000, 0x804001, read16_delegate(FUNC(cps_state::joy_or_paddle_ecofghtr_r), this));
m_maincpu->space(AS_PROGRAM).install_read_handler(0x804000, 0x804001, read16_delegate(FUNC(cps2_state::joy_or_paddle_ecofghtr_r), this));
}
@ -9966,278 +9962,278 @@ void cps_state::init_ecofghtr()
*
*************************************/
GAME( 1993, ssf2, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (World 931005)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2r1, ssf2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (World 930911)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2u, ssf2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (USA 930911)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2a, ssf2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (Asia 931005)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2ar1, ssf2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (Asia 930914)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2j, ssf2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (Japan 931005)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2jr1, ssf2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (Japan 930911)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2jr2, ssf2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (Japan 930910)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2h, ssf2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (Hispanic 930911)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2tb, ssf2, cps2, cps2_2p6b, cps_state, init_ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (World 931119)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN ) // works, but not in tournament mode
GAME( 1993, ssf2tbr1, ssf2, cps2, cps2_2p6b, cps_state, init_ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (World 930911)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN ) // works, but not in tournament mode
GAME( 1993, ssf2tbj, ssf2, cps2, cps2_2p6b, cps_state, init_ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (Japan 931005)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN ) // works, but not in tournament mode
GAME( 1993, ssf2tbj1, ssf2, cps2, cps2_2p6b, cps_state, init_ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (Japan 930911)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN ) // works, but not in tournament mode
GAME( 1993, ssf2tba, ssf2, cps2, cps2_2p6b, cps_state, init_ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (Asia 931005)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN ) // works, but not in tournament mode
GAME( 1993, ssf2tbh, ssf2, cps2, cps2_2p6b, cps_state, init_ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (Hispanic 931005)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN ) // works, but not in tournament mode
GAME( 1993, ecofghtr, 0, cps2, ecofghtr, cps_state, init_ecofghtr, ROT0, "Capcom", "Eco Fighters (World 931203)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ecofghtru, ecofghtr, cps2, ecofghtr, cps_state, init_ecofghtr, ROT0, "Capcom", "Eco Fighters (USA 940215)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ecofghtru1, ecofghtr, cps2, ecofghtr, cps_state, init_ecofghtr, ROT0, "Capcom", "Eco Fighters (USA 931203)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, uecology, ecofghtr, cps2, ecofghtr, cps_state, init_ecofghtr, ROT0, "Capcom", "Ultimate Ecology (Japan 931203)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ecofghtra, ecofghtr, cps2, ecofghtr, cps_state, init_ecofghtr, ROT0, "Capcom", "Eco Fighters (Asia 931203)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ecofghtrh, ecofghtr, cps2, ecofghtr, cps_state, init_ecofghtr, ROT0, "Capcom", "Eco Fighters (Hispanic 931203)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtod, 0, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Euro 940412)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodr1, ddtod, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Euro 940113)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodu, ddtod, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (USA 940125)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodur1, ddtod, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (USA 940113)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodj, ddtod, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Japan 940412)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodjr1, ddtod, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Japan 940125)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodjr2, ddtod, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Japan 940113)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtoda, ddtod, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Asia 940412)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodar1, ddtod, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Asia 940113)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodh, ddtod, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Hispanic 940412)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodhr1, ddtod, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Hispanic 940125)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodhr2, ddtod, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Hispanic 940113)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2t, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (World 940223)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2ta, ssf2t, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (Asia 940223)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2th, ssf2t, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (Hispanic 940223)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2tu, ssf2t, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (USA 940323)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2tur1, ssf2t, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (USA 940223)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2xj, ssf2t, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940311)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2xjr1, ssf2t, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940223)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2xjr1r, ssf2t, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940223 rent version)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, avsp, 0, cps2, cps2_3p3b, cps_state, init_cps2, ROT0, "Capcom", "Alien vs. Predator (Euro 940520)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, avspu, avsp, cps2, cps2_3p3b, cps_state, init_cps2, ROT0, "Capcom", "Alien vs. Predator (USA 940520)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, avspj, avsp, cps2, cps2_3p3b, cps_state, init_cps2, ROT0, "Capcom", "Alien vs. Predator (Japan 940520)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, avspa, avsp, cps2, cps2_3p3b, cps_state, init_cps2, ROT0, "Capcom", "Alien vs. Predator (Asia 940520)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, avsph, avsp, cps2, cps2_3p3b, cps_state, init_cps2, ROT0, "Capcom", "Alien vs. Predator (Hispanic 940520)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, dstlk, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Darkstalkers: The Night Warriors (Euro 940705)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, dstlku, dstlk, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Darkstalkers: The Night Warriors (USA 940818)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, dstlkur1, dstlk, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Darkstalkers: The Night Warriors (USA 940705)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, dstlka, dstlk, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Darkstalkers: The Night Warriors (Asia 940705)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, dstlkh, dstlk, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Darkstalkers: The Night Warriors (Hispanic 940818)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, vampj, dstlk, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Vampire: The Night Warriors (Japan 940705)", MACHINE_SUPPORTS_SAVE ) // partial update set? Only rom 04 is "B" revision
GAME( 1994, vampja, dstlk, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Vampire: The Night Warriors (Japan 940705 alt)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, vampjr1, dstlk, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Vampire: The Night Warriors (Japan 940630)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ringdest, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Ring of Destruction: Slammasters II (Euro 940902)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ringdesta, ringdest, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Ring of Destruction: Slammasters II (Asia 940831)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ringdesth, ringdest, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Ring of Destruction: Slammasters II (Hispanic 940902)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, smbomb, ringdest, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Muscle Bomber: The International Blowout (Japan 940831)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, smbombr1, ringdest, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Super Muscle Bomber: The International Blowout (Japan 940808)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, armwar, 0, cps2, cps2_3p3b, cps_state, init_cps2, ROT0, "Capcom", "Armored Warriors (Euro 941024)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, armwarr1, armwar, cps2, cps2_3p3b, cps_state, init_cps2, ROT0, "Capcom", "Armored Warriors (Euro 941011)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, armwaru, armwar, cps2, cps2_3p3b, cps_state, init_cps2, ROT0, "Capcom", "Armored Warriors (USA 941024)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, armwaru1, armwar, cps2, cps2_3p3b, cps_state, init_cps2, ROT0, "Capcom", "Armored Warriors (USA 940920)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, pgear, armwar, cps2, cps2_3p3b, cps_state, init_cps2, ROT0, "Capcom", "Powered Gear: Strategic Variant Armor Equipment (Japan 941024)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, pgearr1, armwar, cps2, cps2_3p3b, cps_state, init_cps2, ROT0, "Capcom", "Powered Gear: Strategic Variant Armor Equipment (Japan 940916)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, armwara, armwar, cps2, cps2_3p3b, cps_state, init_cps2, ROT0, "Capcom", "Armored Warriors (Asia 941024)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, armwarar1, armwar, cps2, cps2_3p3b, cps_state, init_cps2, ROT0, "Capcom", "Armored Warriors (Asia 940920)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcota, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Euro 950331)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotar1, xmcota, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Euro 950105)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotau, xmcota, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (USA 950105)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotab, xmcota, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Brazil 950331)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotah, xmcota, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Hispanic 950331)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotahr1, xmcota, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Hispanic 950105)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotaj, xmcota, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 950105)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotaj1, xmcota, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 941222)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotaj2, xmcota, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 941219)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotaj3, xmcota, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 941217)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotajr, xmcota, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 941208 rent version)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotaa, xmcota, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Asia 950105)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotaar1, xmcota, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Asia 941217)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, nwarr, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Night Warriors: Darkstalkers' Revenge (Euro 950316)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, nwarru, nwarr, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Night Warriors: Darkstalkers' Revenge (USA 950406)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, nwarrh, nwarr, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Night Warriors: Darkstalkers' Revenge (Hispanic 950403)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, nwarrb, nwarr, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Night Warriors: Darkstalkers' Revenge (Brazil 950403)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, nwarra, nwarr, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Night Warriors: Darkstalkers' Revenge (Asia 950302)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, vhuntj, nwarr, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Vampire Hunter: Darkstalkers' Revenge (Japan 950316)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, vhuntjr1s, nwarr, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Vampire Hunter: Darkstalkers' Revenge (Japan 950307 stop version)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, vhuntjr1, nwarr, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Vampire Hunter: Darkstalkers' Revenge (Japan 950307)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, vhuntjr2, nwarr, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Vampire Hunter: Darkstalkers' Revenge (Japan 950302)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, cybots, 0, cps2, cybots, cps_state, init_cps2, ROT0, "Capcom", "Cyberbots: Fullmetal Madness (Euro 950424)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, cybotsu, cybots, cps2, cybots, cps_state, init_cps2, ROT0, "Capcom", "Cyberbots: Fullmetal Madness (USA 950424)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, cybotsj, cybots, cps2, cybots, cps_state, init_cps2, ROT0, "Capcom", "Cyberbots: Fullmetal Madness (Japan 950420)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfa, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha: Warriors' Dreams (Euro 950727)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfar1, sfa, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha: Warriors' Dreams (Euro 950718)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfar2, sfa, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha: Warriors' Dreams (Euro 950627)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfar3, sfa, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha: Warriors' Dreams (Euro 950605)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfau, sfa, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha: Warriors' Dreams (USA 950627)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfza, sfa, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Asia 950627)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfzar1, sfa, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Asia 950605)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfzj, sfa, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Japan 950727)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfzjr1, sfa, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Japan 950627)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfzjr2, sfa, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Japan 950605)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfzh, sfa, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Hispanic 950718)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfzhr1, sfa, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Hispanic 950627)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfzb, sfa, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Brazil 951109)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfzbr1, sfa, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Brazil 950727)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mmancp2u, megaman, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Capcom", "Mega Man: The Power Battle (CPS2, USA 951006, SAMPLE Version)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mmancp2ur1, megaman, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Capcom", "Mega Man: The Power Battle (CPS2, USA 950926, SAMPLE Version)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, rmancp2j, megaman, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Capcom", "Rockman: The Power Battle (CPS2, Japan 950922)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, msh, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes (Euro 951024)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mshu, msh, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes (USA 951024)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mshj, msh, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes (Japan 951117)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mshjr1, msh, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes (Japan 951024)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, msha, msh, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes (Asia 951024)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mshh, msh, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes (Hispanic 951117)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mshb, msh, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes (Brazil 951117)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mshbr1, msh, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes (Brazil 951024)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xx, 0, cps2, cps2_2p2b, cps_state, init_cps2, ROT270, "Capcom", "19XX: The War Against Destiny (USA 951207)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xxa, 19xx, cps2, cps2_2p2b, cps_state, init_cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Asia 960104)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xxar1, 19xx, cps2, cps2_2p2b, cps_state, init_cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Asia 951207)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xxj, 19xx, cps2, cps2_2p2b, cps_state, init_cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Japan 960104, yellow case)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xxjr1, 19xx, cps2, cps2_2p2b, cps_state, init_cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Japan 951225)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xxjr2, 19xx, cps2, cps2_2p2b, cps_state, init_cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Japan 951207)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xxh, 19xx, cps2, cps2_2p2b, cps_state, init_cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Hispanic 951218)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xxb, 19xx, cps2, cps2_2p2b, cps_state, init_cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Brazil 951218)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsom, 0, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Euro 960619)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomr1, ddsom, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Euro 960223)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomr2, ddsom, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Euro 960209)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomr3, ddsom, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Euro 960208)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomu, ddsom, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (USA 960619)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomur1, ddsom, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (USA 960209)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomj, ddsom, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Japan 960619)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomjr1, ddsom, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Japan 960206)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomjr2, ddsom, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Japan 960223)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsoma, ddsom, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Asia 960619)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomar1, ddsom, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Asia 960208)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomh, ddsom, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Hispanic 960223)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomb, ddsom, cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Brazil 960223)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfa2, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 2 (Euro 960229)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfa2u, sfa2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 2 (USA 960430)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfa2ur1, sfa2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 2 (USA 960306)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2j, sfa2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Japan 960430)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2jr1, sfa2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Japan 960227)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2a, sfa2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Asia 960227)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2b, sfa2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Brazil 960531)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2br1, sfa2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Brazil 960304)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2h, sfa2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Hispanic 960304)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2n, sfa2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Oceania 960229)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2al, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 Alpha (Asia 960826)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2alj, sfz2al, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 Alpha (Japan 960805)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2alh, sfz2al, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 Alpha (Hispanic 960813)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2alb, sfz2al, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 Alpha (Brazil 960813)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, spf2t, 0, cps2, cps2_2p2b, cps_state, init_cps2, ROT0, "Capcom", "Super Puzzle Fighter II Turbo (Euro 960529)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, spf2tu, spf2t, cps2, cps2_2p2b, cps_state, init_cps2, ROT0, "Capcom", "Super Puzzle Fighter II Turbo (USA 960620)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, spf2xj, spf2t, cps2, cps2_2p2b, cps_state, init_cps2, ROT0, "Capcom", "Super Puzzle Fighter II X (Japan 960531)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, spf2ta, spf2t, cps2, cps2_2p2b, cps_state, init_cps2, ROT0, "Capcom", "Super Puzzle Fighter II Turbo (Asia 960529)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, spf2th, spf2t, cps2, cps2_2p2b, cps_state, init_cps2, ROT0, "Capcom", "Super Puzzle Fighter II Turbo (Hispanic 960531)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, megaman2, 0, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Capcom", "Mega Man 2: The Power Fighters (USA 960708)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, megaman2a, megaman2, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Capcom", "Mega Man 2: The Power Fighters (Asia 960708)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, rockman2j, megaman2, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Capcom", "Rockman 2: The Power Fighters (Japan 960708)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, megaman2h, megaman2, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Capcom", "Mega Man 2: The Power Fighters (Hispanic 960712)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, qndream, 0, cps2, qndream, cps_state, init_cps2, ROT0, "Capcom", "Quiz Nanairo Dreams: Nijiirochou no Kiseki (Japan 960826)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsf, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Euro 961004)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfr1, xmvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Euro 960910)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfu, xmvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (USA 961023)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfur1, xmvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (USA 961004)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfur2, xmvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (USA 960910)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfj, xmvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Japan 961023)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfjr1, xmvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Japan 961004)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfjr2, xmvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Japan 960910)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfjr3, xmvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Japan 960909)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfa, xmvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Asia 961023)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfar1, xmvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Asia 961004)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfar2, xmvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Asia 960919)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfar3, xmvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Asia 960910)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfh, xmvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Hispanic 961004)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfb, xmvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Brazil 961023)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, batcir, 0, cps2, cps2_4p2b, cps_state, init_cps2, ROT0, "Capcom", "Battle Circuit (Euro 970319)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, batcira, batcir, cps2, cps2_4p2b, cps_state, init_cps2, ROT0, "Capcom", "Battle Circuit (Asia 970319)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, batcirj, batcir, cps2, cps2_4p2b, cps_state, init_cps2, ROT0, "Capcom", "Battle Circuit (Japan 970319)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vsav, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (Euro 970519)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vsavu, vsav, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (USA 970519)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vsavj, vsav, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (Japan 970519)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vsava, vsav, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (Asia 970519)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vsavh, vsav, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (Hispanic 970519)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsf, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Euro 970625)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfu, mshvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (USA 970827)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfu1, mshvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (USA 970625)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfj, mshvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Japan 970707)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfj1, mshvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Japan 970702)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfj2, mshvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Japan 970625)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfh, mshvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Hispanic 970625)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfa, mshvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Asia 970625)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfa1, mshvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Asia 970620)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfb, mshvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Brazil 970827)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfb1, mshvsf, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Brazil 970625)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, csclub, 0, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Capcom", "Capcom Sports Club (Euro 971017)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, csclub1, csclub, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Capcom", "Capcom Sports Club (Euro 970722)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, cscluba, csclub, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Capcom", "Capcom Sports Club (Asia 970722)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, csclubj, csclub, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Capcom", "Capcom Sports Club (Japan 970722)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, csclubjy, csclub, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Capcom", "Capcom Sports Club (Japan 970722, yellow case)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, csclubh, csclub, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Capcom", "Capcom Sports Club (Hispanic 970722)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, sgemf, 0, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Capcom", "Super Gem Fighter Mini Mix (USA 970904)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, pfghtj, sgemf, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Capcom", "Pocket Fighter (Japan 970904)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, sgemfa, sgemf, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Capcom", "Super Gem Fighter: Mini Mix (Asia 970904)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, sgemfh, sgemf, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Capcom", "Super Gem Fighter: Mini Mix (Hispanic 970904)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vhunt2, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Vampire Hunter 2: Darkstalkers Revenge (Japan 970929)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vhunt2r1, vhunt2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Vampire Hunter 2: Darkstalkers Revenge (Japan 970913)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vsav2, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Vampire Savior 2: The Lord of Vampire (Japan 970913)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvsc, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Euro 980123)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscr1, mvsc, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Euro 980112)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscu, mvsc, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (USA 980123)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscur1, mvsc, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (USA 971222)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscj, mvsc, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Japan 980123)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscjr1, mvsc, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Japan 980112)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscjsing, mvsc, cps2, cps2_2p6b, cps_state, init_singbrd, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Japan 980123) (Single PCB)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvsca, mvsc, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Asia 980123)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscar1, mvsc, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Asia 980112)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvsch, mvsc, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Hispanic 980123)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscb, mvsc, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Brazil 980123)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfa3, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 3 (Euro 980904)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfa3u, sfa3, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 3 (USA 980904)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfa3ur1, sfa3, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 3 (USA 980629)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfa3us, sfa3, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 3 (USA 980616, SAMPLE Version)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfa3h, sfa3, cps2, cps2_2p6bt, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 3 (Hispanic 980904)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfa3hr1, sfa3, cps2, cps2_2p6bt, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 3 (Hispanic 980629)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfa3b, sfa3, cps2, cps2_2p6bt, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 3 (Brazil 980629)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfz3j, sfa3, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 3 (Japan 980904)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfz3jr1, sfa3, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 3 (Japan 980727)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfz3jr2, sfa3, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 3 (Japan 980629)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfz3a, sfa3, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 3 (Asia 980904)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfz3ar1, sfa3, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 3 (Asia 980701)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, jyangoku, 0, cps2, cps2_1p2b, cps_state, init_cps2, ROT0, "Capcom", "Jyangokushi: Haoh no Saihai (Japan 990527)", MACHINE_SUPPORTS_SAVE )
GAME( 2004, hsf2, 0, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Hyper Street Fighter II: The Anniversary Edition (USA 040202)", MACHINE_SUPPORTS_SAVE )
GAME( 2004, hsf2a, hsf2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Hyper Street Fighter II: The Anniversary Edition (Asia 040202)", MACHINE_SUPPORTS_SAVE )
GAME( 2004, hsf2j, hsf2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Hyper Street Fighter II: The Anniversary Edition (Japan 040202)", MACHINE_SUPPORTS_SAVE )
GAME( 2004, hsf2j1, hsf2, cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "Capcom", "Hyper Street Fighter II: The Anniversary Edition (Japan 031222)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (World 931005)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2r1, ssf2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (World 930911)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2u, ssf2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (USA 930911)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2a, ssf2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (Asia 931005)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2ar1, ssf2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (Asia 930914)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2j, ssf2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (Japan 931005)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2jr1, ssf2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (Japan 930911)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2jr2, ssf2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (Japan 930910)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2h, ssf2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II: The New Challengers (Hispanic 930911)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2tb, ssf2, cps2, cps2_2p6b, cps2_state, init_ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (World 931119)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN ) // works, but not in tournament mode
GAME( 1993, ssf2tbr1, ssf2, cps2, cps2_2p6b, cps2_state, init_ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (World 930911)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN ) // works, but not in tournament mode
GAME( 1993, ssf2tbj, ssf2, cps2, cps2_2p6b, cps2_state, init_ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (Japan 931005)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN ) // works, but not in tournament mode
GAME( 1993, ssf2tbj1, ssf2, cps2, cps2_2p6b, cps2_state, init_ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (Japan 930911)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN ) // works, but not in tournament mode
GAME( 1993, ssf2tba, ssf2, cps2, cps2_2p6b, cps2_state, init_ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (Asia 931005)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN ) // works, but not in tournament mode
GAME( 1993, ssf2tbh, ssf2, cps2, cps2_2p6b, cps2_state, init_ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (Hispanic 931005)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN ) // works, but not in tournament mode
GAME( 1993, ecofghtr, 0, cps2, ecofghtr, cps2_state, init_ecofghtr, ROT0, "Capcom", "Eco Fighters (World 931203)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ecofghtru, ecofghtr, cps2, ecofghtr, cps2_state, init_ecofghtr, ROT0, "Capcom", "Eco Fighters (USA 940215)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ecofghtru1, ecofghtr, cps2, ecofghtr, cps2_state, init_ecofghtr, ROT0, "Capcom", "Eco Fighters (USA 931203)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, uecology, ecofghtr, cps2, ecofghtr, cps2_state, init_ecofghtr, ROT0, "Capcom", "Ultimate Ecology (Japan 931203)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ecofghtra, ecofghtr, cps2, ecofghtr, cps2_state, init_ecofghtr, ROT0, "Capcom", "Eco Fighters (Asia 931203)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ecofghtrh, ecofghtr, cps2, ecofghtr, cps2_state, init_ecofghtr, ROT0, "Capcom", "Eco Fighters (Hispanic 931203)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtod, 0, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Euro 940412)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodr1, ddtod, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Euro 940113)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodu, ddtod, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (USA 940125)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodur1, ddtod, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (USA 940113)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodj, ddtod, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Japan 940412)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodjr1, ddtod, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Japan 940125)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodjr2, ddtod, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Japan 940113)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtoda, ddtod, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Asia 940412)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodar1, ddtod, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Asia 940113)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodh, ddtod, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Hispanic 940412)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodhr1, ddtod, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Hispanic 940125)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodhr2, ddtod, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Hispanic 940113)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2t, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (World 940223)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2ta, ssf2t, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (Asia 940223)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2th, ssf2t, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (Hispanic 940223)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2tu, ssf2t, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (USA 940323)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2tur1, ssf2t, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (USA 940223)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2xj, ssf2t, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940311)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2xjr1, ssf2t, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940223)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2xjr1r, ssf2t, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940223 rent version)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, avsp, 0, cps2, cps2_3p3b, cps2_state, init_cps2, ROT0, "Capcom", "Alien vs. Predator (Euro 940520)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, avspu, avsp, cps2, cps2_3p3b, cps2_state, init_cps2, ROT0, "Capcom", "Alien vs. Predator (USA 940520)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, avspj, avsp, cps2, cps2_3p3b, cps2_state, init_cps2, ROT0, "Capcom", "Alien vs. Predator (Japan 940520)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, avspa, avsp, cps2, cps2_3p3b, cps2_state, init_cps2, ROT0, "Capcom", "Alien vs. Predator (Asia 940520)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, avsph, avsp, cps2, cps2_3p3b, cps2_state, init_cps2, ROT0, "Capcom", "Alien vs. Predator (Hispanic 940520)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, dstlk, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Darkstalkers: The Night Warriors (Euro 940705)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, dstlku, dstlk, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Darkstalkers: The Night Warriors (USA 940818)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, dstlkur1, dstlk, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Darkstalkers: The Night Warriors (USA 940705)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, dstlka, dstlk, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Darkstalkers: The Night Warriors (Asia 940705)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, dstlkh, dstlk, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Darkstalkers: The Night Warriors (Hispanic 940818)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, vampj, dstlk, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Vampire: The Night Warriors (Japan 940705)", MACHINE_SUPPORTS_SAVE ) // partial update set? Only rom 04 is "B" revision
GAME( 1994, vampja, dstlk, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Vampire: The Night Warriors (Japan 940705 alt)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, vampjr1, dstlk, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Vampire: The Night Warriors (Japan 940630)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ringdest, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Ring of Destruction: Slammasters II (Euro 940902)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ringdesta, ringdest, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Ring of Destruction: Slammasters II (Asia 940831)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ringdesth, ringdest, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Ring of Destruction: Slammasters II (Hispanic 940902)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, smbomb, ringdest, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Muscle Bomber: The International Blowout (Japan 940831)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, smbombr1, ringdest, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Super Muscle Bomber: The International Blowout (Japan 940808)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, armwar, 0, cps2, cps2_3p3b, cps2_state, init_cps2, ROT0, "Capcom", "Armored Warriors (Euro 941024)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, armwarr1, armwar, cps2, cps2_3p3b, cps2_state, init_cps2, ROT0, "Capcom", "Armored Warriors (Euro 941011)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, armwaru, armwar, cps2, cps2_3p3b, cps2_state, init_cps2, ROT0, "Capcom", "Armored Warriors (USA 941024)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, armwaru1, armwar, cps2, cps2_3p3b, cps2_state, init_cps2, ROT0, "Capcom", "Armored Warriors (USA 940920)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, pgear, armwar, cps2, cps2_3p3b, cps2_state, init_cps2, ROT0, "Capcom", "Powered Gear: Strategic Variant Armor Equipment (Japan 941024)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, pgearr1, armwar, cps2, cps2_3p3b, cps2_state, init_cps2, ROT0, "Capcom", "Powered Gear: Strategic Variant Armor Equipment (Japan 940916)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, armwara, armwar, cps2, cps2_3p3b, cps2_state, init_cps2, ROT0, "Capcom", "Armored Warriors (Asia 941024)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, armwarar1, armwar, cps2, cps2_3p3b, cps2_state, init_cps2, ROT0, "Capcom", "Armored Warriors (Asia 940920)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcota, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Euro 950331)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotar1, xmcota, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Euro 950105)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotau, xmcota, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (USA 950105)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotab, xmcota, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Brazil 950331)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotah, xmcota, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Hispanic 950331)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotahr1, xmcota, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Hispanic 950105)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotaj, xmcota, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 950105)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotaj1, xmcota, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 941222)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotaj2, xmcota, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 941219)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotaj3, xmcota, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 941217)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotajr, xmcota, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 941208 rent version)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotaa, xmcota, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Asia 950105)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotaar1, xmcota, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Asia 941217)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, nwarr, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Night Warriors: Darkstalkers' Revenge (Euro 950316)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, nwarru, nwarr, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Night Warriors: Darkstalkers' Revenge (USA 950406)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, nwarrh, nwarr, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Night Warriors: Darkstalkers' Revenge (Hispanic 950403)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, nwarrb, nwarr, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Night Warriors: Darkstalkers' Revenge (Brazil 950403)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, nwarra, nwarr, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Night Warriors: Darkstalkers' Revenge (Asia 950302)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, vhuntj, nwarr, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Vampire Hunter: Darkstalkers' Revenge (Japan 950316)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, vhuntjr1s, nwarr, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Vampire Hunter: Darkstalkers' Revenge (Japan 950307 stop version)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, vhuntjr1, nwarr, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Vampire Hunter: Darkstalkers' Revenge (Japan 950307)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, vhuntjr2, nwarr, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Vampire Hunter: Darkstalkers' Revenge (Japan 950302)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, cybots, 0, cps2, cybots, cps2_state, init_cps2, ROT0, "Capcom", "Cyberbots: Fullmetal Madness (Euro 950424)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, cybotsu, cybots, cps2, cybots, cps2_state, init_cps2, ROT0, "Capcom", "Cyberbots: Fullmetal Madness (USA 950424)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, cybotsj, cybots, cps2, cybots, cps2_state, init_cps2, ROT0, "Capcom", "Cyberbots: Fullmetal Madness (Japan 950420)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfa, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha: Warriors' Dreams (Euro 950727)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfar1, sfa, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha: Warriors' Dreams (Euro 950718)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfar2, sfa, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha: Warriors' Dreams (Euro 950627)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfar3, sfa, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha: Warriors' Dreams (Euro 950605)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfau, sfa, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha: Warriors' Dreams (USA 950627)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfza, sfa, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Asia 950627)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfzar1, sfa, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Asia 950605)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfzj, sfa, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Japan 950727)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfzjr1, sfa, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Japan 950627)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfzjr2, sfa, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Japan 950605)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfzh, sfa, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Hispanic 950718)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfzhr1, sfa, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Hispanic 950627)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfzb, sfa, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Brazil 951109)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfzbr1, sfa, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero (Brazil 950727)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mmancp2u, megaman, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Capcom", "Mega Man: The Power Battle (CPS2, USA 951006, SAMPLE Version)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mmancp2ur1, megaman, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Capcom", "Mega Man: The Power Battle (CPS2, USA 950926, SAMPLE Version)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, rmancp2j, megaman, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Capcom", "Rockman: The Power Battle (CPS2, Japan 950922)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, msh, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes (Euro 951024)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mshu, msh, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes (USA 951024)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mshj, msh, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes (Japan 951117)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mshjr1, msh, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes (Japan 951024)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, msha, msh, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes (Asia 951024)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mshh, msh, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes (Hispanic 951117)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mshb, msh, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes (Brazil 951117)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mshbr1, msh, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes (Brazil 951024)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xx, 0, cps2, cps2_2p2b, cps2_state, init_cps2, ROT270, "Capcom", "19XX: The War Against Destiny (USA 951207)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xxa, 19xx, cps2, cps2_2p2b, cps2_state, init_cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Asia 960104)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xxar1, 19xx, cps2, cps2_2p2b, cps2_state, init_cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Asia 951207)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xxj, 19xx, cps2, cps2_2p2b, cps2_state, init_cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Japan 960104, yellow case)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xxjr1, 19xx, cps2, cps2_2p2b, cps2_state, init_cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Japan 951225)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xxjr2, 19xx, cps2, cps2_2p2b, cps2_state, init_cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Japan 951207)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xxh, 19xx, cps2, cps2_2p2b, cps2_state, init_cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Hispanic 951218)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xxb, 19xx, cps2, cps2_2p2b, cps2_state, init_cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Brazil 951218)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsom, 0, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Euro 960619)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomr1, ddsom, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Euro 960223)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomr2, ddsom, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Euro 960209)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomr3, ddsom, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Euro 960208)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomu, ddsom, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (USA 960619)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomur1, ddsom, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (USA 960209)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomj, ddsom, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Japan 960619)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomjr1, ddsom, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Japan 960206)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomjr2, ddsom, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Japan 960223)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsoma, ddsom, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Asia 960619)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomar1, ddsom, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Asia 960208)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomh, ddsom, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Hispanic 960223)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomb, ddsom, cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Brazil 960223)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfa2, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 2 (Euro 960229)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfa2u, sfa2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 2 (USA 960430)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfa2ur1, sfa2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 2 (USA 960306)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2j, sfa2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Japan 960430)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2jr1, sfa2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Japan 960227)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2a, sfa2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Asia 960227)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2b, sfa2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Brazil 960531)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2br1, sfa2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Brazil 960304)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2h, sfa2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Hispanic 960304)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2n, sfa2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Oceania 960229)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2al, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 Alpha (Asia 960826)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2alj, sfz2al, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 Alpha (Japan 960805)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2alh, sfz2al, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 Alpha (Hispanic 960813)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2alb, sfz2al, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 2 Alpha (Brazil 960813)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, spf2t, 0, cps2, cps2_2p2b, cps2_state, init_cps2, ROT0, "Capcom", "Super Puzzle Fighter II Turbo (Euro 960529)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, spf2tu, spf2t, cps2, cps2_2p2b, cps2_state, init_cps2, ROT0, "Capcom", "Super Puzzle Fighter II Turbo (USA 960620)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, spf2xj, spf2t, cps2, cps2_2p2b, cps2_state, init_cps2, ROT0, "Capcom", "Super Puzzle Fighter II X (Japan 960531)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, spf2ta, spf2t, cps2, cps2_2p2b, cps2_state, init_cps2, ROT0, "Capcom", "Super Puzzle Fighter II Turbo (Asia 960529)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, spf2th, spf2t, cps2, cps2_2p2b, cps2_state, init_cps2, ROT0, "Capcom", "Super Puzzle Fighter II Turbo (Hispanic 960531)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, megaman2, 0, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Capcom", "Mega Man 2: The Power Fighters (USA 960708)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, megaman2a, megaman2, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Capcom", "Mega Man 2: The Power Fighters (Asia 960708)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, rockman2j, megaman2, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Capcom", "Rockman 2: The Power Fighters (Japan 960708)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, megaman2h, megaman2, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Capcom", "Mega Man 2: The Power Fighters (Hispanic 960712)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, qndream, 0, cps2, qndream, cps2_state, init_cps2, ROT0, "Capcom", "Quiz Nanairo Dreams: Nijiirochou no Kiseki (Japan 960826)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsf, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Euro 961004)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfr1, xmvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Euro 960910)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfu, xmvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (USA 961023)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfur1, xmvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (USA 961004)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfur2, xmvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (USA 960910)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfj, xmvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Japan 961023)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfjr1, xmvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Japan 961004)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfjr2, xmvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Japan 960910)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfjr3, xmvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Japan 960909)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfa, xmvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Asia 961023)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfar1, xmvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Asia 961004)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfar2, xmvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Asia 960919)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfar3, xmvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Asia 960910)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfh, xmvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Hispanic 961004)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfb, xmvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Brazil 961023)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, batcir, 0, cps2, cps2_4p2b, cps2_state, init_cps2, ROT0, "Capcom", "Battle Circuit (Euro 970319)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, batcira, batcir, cps2, cps2_4p2b, cps2_state, init_cps2, ROT0, "Capcom", "Battle Circuit (Asia 970319)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, batcirj, batcir, cps2, cps2_4p2b, cps2_state, init_cps2, ROT0, "Capcom", "Battle Circuit (Japan 970319)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vsav, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (Euro 970519)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vsavu, vsav, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (USA 970519)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vsavj, vsav, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (Japan 970519)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vsava, vsav, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (Asia 970519)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vsavh, vsav, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (Hispanic 970519)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsf, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Euro 970625)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfu, mshvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (USA 970827)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfu1, mshvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (USA 970625)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfj, mshvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Japan 970707)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfj1, mshvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Japan 970702)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfj2, mshvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Japan 970625)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfh, mshvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Hispanic 970625)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfa, mshvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Asia 970625)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfa1, mshvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Asia 970620)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfb, mshvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Brazil 970827)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfb1, mshvsf, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Brazil 970625)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, csclub, 0, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Capcom", "Capcom Sports Club (Euro 971017)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, csclub1, csclub, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Capcom", "Capcom Sports Club (Euro 970722)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, cscluba, csclub, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Capcom", "Capcom Sports Club (Asia 970722)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, csclubj, csclub, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Capcom", "Capcom Sports Club (Japan 970722)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, csclubjy, csclub, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Capcom", "Capcom Sports Club (Japan 970722, yellow case)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, csclubh, csclub, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Capcom", "Capcom Sports Club (Hispanic 970722)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, sgemf, 0, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Capcom", "Super Gem Fighter Mini Mix (USA 970904)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, pfghtj, sgemf, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Capcom", "Pocket Fighter (Japan 970904)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, sgemfa, sgemf, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Capcom", "Super Gem Fighter: Mini Mix (Asia 970904)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, sgemfh, sgemf, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Capcom", "Super Gem Fighter: Mini Mix (Hispanic 970904)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vhunt2, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Vampire Hunter 2: Darkstalkers Revenge (Japan 970929)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vhunt2r1, vhunt2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Vampire Hunter 2: Darkstalkers Revenge (Japan 970913)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vsav2, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Vampire Savior 2: The Lord of Vampire (Japan 970913)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvsc, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Euro 980123)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscr1, mvsc, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Euro 980112)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscu, mvsc, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (USA 980123)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscur1, mvsc, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (USA 971222)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscj, mvsc, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Japan 980123)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscjr1, mvsc, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Japan 980112)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscjsing, mvsc, cps2, cps2_2p6b, cps2_state, init_singbrd, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Japan 980123) (Single PCB)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvsca, mvsc, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Asia 980123)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscar1, mvsc, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Asia 980112)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvsch, mvsc, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Hispanic 980123)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscb, mvsc, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Brazil 980123)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfa3, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 3 (Euro 980904)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfa3u, sfa3, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 3 (USA 980904)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfa3ur1, sfa3, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 3 (USA 980629)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfa3us, sfa3, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 3 (USA 980616, SAMPLE Version)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfa3h, sfa3, cps2, cps2_2p6bt, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 3 (Hispanic 980904)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfa3hr1, sfa3, cps2, cps2_2p6bt, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 3 (Hispanic 980629)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfa3b, sfa3, cps2, cps2_2p6bt, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Alpha 3 (Brazil 980629)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfz3j, sfa3, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 3 (Japan 980904)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfz3jr1, sfa3, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 3 (Japan 980727)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfz3jr2, sfa3, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 3 (Japan 980629)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfz3a, sfa3, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 3 (Asia 980904)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfz3ar1, sfa3, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Street Fighter Zero 3 (Asia 980701)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, jyangoku, 0, cps2, cps2_1p2b, cps2_state, init_cps2, ROT0, "Capcom", "Jyangokushi: Haoh no Saihai (Japan 990527)", MACHINE_SUPPORTS_SAVE )
GAME( 2004, hsf2, 0, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Hyper Street Fighter II: The Anniversary Edition (USA 040202)", MACHINE_SUPPORTS_SAVE )
GAME( 2004, hsf2a, hsf2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Hyper Street Fighter II: The Anniversary Edition (Asia 040202)", MACHINE_SUPPORTS_SAVE )
GAME( 2004, hsf2j, hsf2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Hyper Street Fighter II: The Anniversary Edition (Japan 040202)", MACHINE_SUPPORTS_SAVE )
GAME( 2004, hsf2j1, hsf2, cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "Capcom", "Hyper Street Fighter II: The Anniversary Edition (Japan 031222)", MACHINE_SUPPORTS_SAVE )
/* Games released on CPS-2 hardware by Takumi */
GAME( 1999, gigawing, 0, cps2, cps2_2p2b, cps_state, init_cps2, ROT0, "Takumi (Capcom license)", "Giga Wing (USA 990222)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, gigawingj, gigawing, cps2, cps2_2p2b, cps_state, init_cps2, ROT0, "Takumi (Capcom license)", "Giga Wing (Japan 990223)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, gigawinga, gigawing, cps2, cps2_2p2b, cps_state, init_cps2, ROT0, "Takumi (Capcom license)", "Giga Wing (Asia 990222)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, gigawingh, gigawing, cps2, cps2_2p2b, cps_state, init_cps2, ROT0, "Takumi (Capcom license)", "Giga Wing (Hispanic 990222)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, gigawingb, gigawing, cps2, cps2_2p2b, cps_state, init_cps2, ROT0, "Takumi (Capcom license)", "Giga Wing (Brazil 990222)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, mmatrix, 0, cps2, cps2_2p1b, cps_state, init_cps2, ROT0, "Takumi (Capcom license)", "Mars Matrix: Hyper Solid Shooting (USA 000412)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, mmatrixj, mmatrix, cps2, cps2_2p1b, cps_state, init_cps2, ROT0, "Takumi (Capcom license)", "Mars Matrix: Hyper Solid Shooting (Japan 000412)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, gigawing, 0, cps2, cps2_2p2b, cps2_state, init_cps2, ROT0, "Takumi (Capcom license)", "Giga Wing (USA 990222)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, gigawingj, gigawing, cps2, cps2_2p2b, cps2_state, init_cps2, ROT0, "Takumi (Capcom license)", "Giga Wing (Japan 990223)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, gigawinga, gigawing, cps2, cps2_2p2b, cps2_state, init_cps2, ROT0, "Takumi (Capcom license)", "Giga Wing (Asia 990222)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, gigawingh, gigawing, cps2, cps2_2p2b, cps2_state, init_cps2, ROT0, "Takumi (Capcom license)", "Giga Wing (Hispanic 990222)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, gigawingb, gigawing, cps2, cps2_2p2b, cps2_state, init_cps2, ROT0, "Takumi (Capcom license)", "Giga Wing (Brazil 990222)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, mmatrix, 0, cps2, cps2_2p1b, cps2_state, init_cps2, ROT0, "Takumi (Capcom license)", "Mars Matrix: Hyper Solid Shooting (USA 000412)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, mmatrixj, mmatrix, cps2, cps2_2p1b, cps2_state, init_cps2, ROT0, "Takumi (Capcom license)", "Mars Matrix: Hyper Solid Shooting (Japan 000412)", MACHINE_SUPPORTS_SAVE )
/* Games released on CPS-2 hardware by Mitchell */
GAME( 2000, mpang, 0, cps2, cps2_2p1b, cps_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (Euro 001010)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, mpangr1, mpang, cps2, cps2_2p1b, cps_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (Euro 000925)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, mpangu, mpang, cps2, cps2_2p1b, cps_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (USA 001010)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, mpangj, mpang, cps2, cps2_2p1b, cps_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (Japan 001011)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, pzloop2, 0, cps2, pzloop2, cps_state, init_pzloop2, ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Euro 010302)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, pzloop2j, pzloop2, cps2, pzloop2, cps_state, init_pzloop2, ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Japan 010226)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, pzloop2jr1, pzloop2, cps2, pzloop2, cps_state, init_pzloop2, ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Japan 010205)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, choko, 0, cps2, choko, cps_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Janpai Puzzle Choukou (Japan 010820)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, mpang, 0, cps2, cps2_2p1b, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (Euro 001010)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, mpangr1, mpang, cps2, cps2_2p1b, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (Euro 000925)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, mpangu, mpang, cps2, cps2_2p1b, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (USA 001010)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, mpangj, mpang, cps2, cps2_2p1b, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (Japan 001011)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, pzloop2, 0, cps2, pzloop2, cps2_state, init_pzloop2, ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Euro 010302)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, pzloop2j, pzloop2, cps2, pzloop2, cps2_state, init_pzloop2, ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Japan 010226)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, pzloop2jr1, pzloop2, cps2, pzloop2, cps2_state, init_pzloop2, ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Japan 010205)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, choko, 0, cps2, choko, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Janpai Puzzle Choukou (Japan 010820)", MACHINE_SUPPORTS_SAVE )
/* Games released on CPS-2 hardware by Eighting/Raizing */
GAME( 2000, dimahoo, 0, cps2, cps2_2p3b, cps_state, init_cps2, ROT270, "Eighting / Raizing (Capcom license)", "Dimahoo (Euro 000121)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, dimahoou, dimahoo, cps2, cps2_2p3b, cps_state, init_cps2, ROT270, "Eighting / Raizing (Capcom license)", "Dimahoo (USA 000121)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, gmahou, dimahoo, cps2, cps2_2p3b, cps_state, init_cps2, ROT270, "Eighting / Raizing (Capcom license)", "Great Mahou Daisakusen (Japan 000121)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, 1944, 0, cps2, cps2_2p2b, cps_state, init_cps2, ROT0, "Eighting / Raizing (Capcom license)", "1944: The Loop Master (USA 000620)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, 1944j, 1944, cps2, cps2_2p2b, cps_state, init_cps2, ROT0, "Eighting / Raizing (Capcom license)", "1944: The Loop Master (Japan 000620)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, dimahoo, 0, cps2, cps2_2p3b, cps2_state, init_cps2, ROT270, "Eighting / Raizing (Capcom license)", "Dimahoo (Euro 000121)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, dimahoou, dimahoo, cps2, cps2_2p3b, cps2_state, init_cps2, ROT270, "Eighting / Raizing (Capcom license)", "Dimahoo (USA 000121)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, gmahou, dimahoo, cps2, cps2_2p3b, cps2_state, init_cps2, ROT270, "Eighting / Raizing (Capcom license)", "Great Mahou Daisakusen (Japan 000121)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, 1944, 0, cps2, cps2_2p2b, cps2_state, init_cps2, ROT0, "Eighting / Raizing (Capcom license)", "1944: The Loop Master (USA 000620)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, 1944j, 1944, cps2, cps2_2p2b, cps2_state, init_cps2, ROT0, "Eighting / Raizing (Capcom license)", "1944: The Loop Master (Japan 000620)", MACHINE_SUPPORTS_SAVE )
/* Games released on CPS-2 hardware by Cave */
GAME( 2001, progear, 0, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Cave (Capcom license)", "Progear (USA 010117)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, progearj, progear, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Cave (Capcom license)", "Progear no Arashi (Japan 010117)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, progeara, progear, cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "Cave (Capcom license)", "Progear (Asia 010117)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, progear, 0, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Cave (Capcom license)", "Progear (USA 010117)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, progearj, progear, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Cave (Capcom license)", "Progear no Arashi (Japan 010117)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, progeara, progear, cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "Cave (Capcom license)", "Progear (Asia 010117)", MACHINE_SUPPORTS_SAVE )
/*
------------------------
@ -11724,48 +11720,48 @@ ROM_START( sfz2jd )
ROM_END
GAME( 1993, ddtodd, ddtod, dead_cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "bootleg", "Dungeons & Dragons: Tower of Doom (Euro 940412 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ecofghtrd, ecofghtr, dead_cps2, ecofghtr, cps_state, init_ecofghtr, ROT0, "bootleg", "Eco Fighters (World 931203 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2ud, ssf2, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Super Street Fighter II: The New Challengers (USA 930911 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2tbd, ssf2, dead_cps2, cps2_2p6b, cps_state, init_ssf2tb, ROT0, "bootleg", "Super Street Fighter II: The Tournament Battle (World 931119 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
GAME( 1994, armwar1d, armwar, dead_cps2, cps2_3p3b, cps_state, init_cps2, ROT0, "bootleg", "Armored Warriors (Euro 941011 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, avspd, avsp, dead_cps2, cps2_3p3b, cps_state, init_cps2, ROT0, "bootleg", "Alien vs. Predator (Euro 940520 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, dstlku1d, dstlk, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Darkstalkers: The Night Warriors (USA 940705 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ringdstd, ringdest, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Ring of Destruction: Slammasters II (Euro 940902 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2tad, ssf2t, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Super Street Fighter II Turbo (Asia 940223 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2xjr1d, ssf2t, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Super Street Fighter II X: Grand Master Challenge (Japan 940223 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotar1d, xmcota, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "X-Men: Children of the Atom (Euro 950105 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mshud, msh, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Marvel Super Heroes (US 951024 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, cybotsud, cybots, dead_cps2, cybots, cps_state, init_cps2, ROT0, "bootleg", "Cyberbots: Fullmetal Madness (USA 950424 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, cybotsjd, cybots, dead_cps2, cybots, cps_state, init_cps2, ROT0, "bootleg", "Cyberbots: Fullmetal Madness (Japan 950424) (decrypted bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, nwarrud, nwarr, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Night Warriors: Darkstalkers' Revenge (USA 950406 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfad, sfa, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Street Fighter Alpha: Warriors' Dreams (Euro 950727 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xxd, 19xx, dead_cps2, cps2_2p2b, cps_state, init_cps2, ROT270, "bootleg", "19XX: The War Against Destiny (USA 951207 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomud, ddsom, dead_cps2, cps2_4p4b, cps_state, init_cps2, ROT0, "bootleg", "Dungeons & Dragons: Shadow over Mystara (USA 960619 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, gigaman2, megaman2, gigaman2, cps2_2p3b, cps_state, init_gigaman2, ROT0, "bootleg", "Giga Man 2: The Power Fighters (bootleg of Mega Man 2: The Power Fighters)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) // different layer offsets and sound system
GAME( 1996, megamn2d, megaman2, dead_cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "bootleg", "Mega Man 2: The Power Fighters (USA 960708 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2ad, sfa2, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Street Fighter Zero 2 (Asia 960227 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2jd, sfa2, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Street Fighter Zero 2 (Japan 960227 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, spf2td, spf2t, dead_cps2, cps2_2p2b, cps_state, init_cps2, ROT0, "bootleg", "Super Puzzle Fighter II Turbo (USA 960620 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, spf2xjd, spf2t, dead_cps2, cps2_2p2b, cps_state, init_cps2, ROT0, "bootleg", "Super Puzzle Fighter II X (Japan 960531 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2ald, sfz2al, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Street Fighter Zero 2 Alpha (Asia 960826 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfu1d, xmvsf, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "X-Men Vs. Street Fighter (USA 961004 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, batcird, batcir, dead_cps2, cps2_4p2b, cps_state, init_cps2, ROT0, "bootleg", "Battle Circuit (Euro 970319 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, csclub1d, csclub, dead_cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "bootleg", "Capcom Sports Club (Euro 970722 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfu1d, mshvsf, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Marvel Super Heroes Vs. Street Fighter (USA 970625 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, sgemfd, sgemf, dead_cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "bootleg", "Super Gem Fighter Mini Mix (USA 970904 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vsavd, vsav, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Vampire Savior: The Lord of Vampire (Euro 970519 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vhunt2d, vhunt2, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Vampire Hunter 2: Darkstalkers Revenge (Japan 970913 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vsav2d, vsav2, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Vampire Savior 2: The Lord of Vampire (Japan 970913 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscud, mvsc, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Marvel Vs. Capcom: Clash of Super Heroes (USA 980123 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfa3ud, sfa3, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Street Fighter Alpha 3 (USA 980904 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfz3jr2d, sfa3, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Street Fighter Zero 3 (Japan 980629 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, gigawingd, gigawing, dead_cps2, cps2_2p2b, cps_state, init_cps2, ROT0, "bootleg", "Giga Wing (USA 990222 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, gigawingjd, gigawing, dead_cps2, cps2_2p2b, cps_state, init_cps2, ROT0, "bootleg", "Giga Wing (Japan 990223 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, 1944d, 1944, dead_cps2, cps2_2p2b, cps_state, init_cps2, ROT0, "bootleg", "1944: The Loop Master (USA 000620 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, dimahoud, dimahoo, dead_cps2, cps2_2p3b, cps_state, init_cps2, ROT270, "bootleg", "Dimahoo (USA 000121 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, mmatrixd, mmatrix, dead_cps2, cps2_2p1b, cps_state, init_cps2, ROT0, "bootleg", "Mars Matrix: Hyper Solid Shooting (USA 000412 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, progearud, progear, dead_cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "bootleg", "Progear (USA 010117 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, progearjd, progear, dead_cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "bootleg", "Progear no Arashi (Japan 010117 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, progearjbl, progear, dead_cps2, cps2_2p3b, cps_state, init_cps2, ROT0, "bootleg", "Progear no Arashi (Japan 010117) (decrypted bootleg)", MACHINE_SUPPORTS_SAVE ) // not an actual phoenix set, but works as one
GAME( 2004, hsf2d, hsf2, dead_cps2, cps2_2p6b, cps_state, init_cps2, ROT0, "bootleg", "Hyper Street Fighter II: The Anniversary Edition (Asia 040202 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ddtodd, ddtod, dead_cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "bootleg", "Dungeons & Dragons: Tower of Doom (Euro 940412 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ecofghtrd, ecofghtr, dead_cps2, ecofghtr, cps2_state, init_ecofghtr, ROT0, "bootleg", "Eco Fighters (World 931203 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2ud, ssf2, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Super Street Fighter II: The New Challengers (USA 930911 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ssf2tbd, ssf2, dead_cps2, cps2_2p6b, cps2_state, init_ssf2tb, ROT0, "bootleg", "Super Street Fighter II: The Tournament Battle (World 931119 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
GAME( 1994, armwar1d, armwar, dead_cps2, cps2_3p3b, cps2_state, init_cps2, ROT0, "bootleg", "Armored Warriors (Euro 941011 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, avspd, avsp, dead_cps2, cps2_3p3b, cps2_state, init_cps2, ROT0, "bootleg", "Alien vs. Predator (Euro 940520 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, dstlku1d, dstlk, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Darkstalkers: The Night Warriors (USA 940705 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ringdstd, ringdest, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Ring of Destruction: Slammasters II (Euro 940902 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2tad, ssf2t, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Super Street Fighter II Turbo (Asia 940223 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2xjr1d, ssf2t, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Super Street Fighter II X: Grand Master Challenge (Japan 940223 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotar1d, xmcota, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "X-Men: Children of the Atom (Euro 950105 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mshud, msh, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Marvel Super Heroes (US 951024 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, cybotsud, cybots, dead_cps2, cybots, cps2_state, init_cps2, ROT0, "bootleg", "Cyberbots: Fullmetal Madness (USA 950424 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, cybotsjd, cybots, dead_cps2, cybots, cps2_state, init_cps2, ROT0, "bootleg", "Cyberbots: Fullmetal Madness (Japan 950424) (decrypted bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, nwarrud, nwarr, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Night Warriors: Darkstalkers' Revenge (USA 950406 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, sfad, sfa, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Street Fighter Alpha: Warriors' Dreams (Euro 950727 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, 19xxd, 19xx, dead_cps2, cps2_2p2b, cps2_state, init_cps2, ROT270, "bootleg", "19XX: The War Against Destiny (USA 951207 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, ddsomud, ddsom, dead_cps2, cps2_4p4b, cps2_state, init_cps2, ROT0, "bootleg", "Dungeons & Dragons: Shadow over Mystara (USA 960619 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, gigaman2, megaman2, gigaman2, cps2_2p3b, cps2_state, init_gigaman2, ROT0, "bootleg", "Giga Man 2: The Power Fighters (bootleg of Mega Man 2: The Power Fighters)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) // different layer offsets and sound system
GAME( 1996, megamn2d, megaman2, dead_cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "bootleg", "Mega Man 2: The Power Fighters (USA 960708 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2ad, sfa2, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Street Fighter Zero 2 (Asia 960227 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2jd, sfa2, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Street Fighter Zero 2 (Japan 960227 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, spf2td, spf2t, dead_cps2, cps2_2p2b, cps2_state, init_cps2, ROT0, "bootleg", "Super Puzzle Fighter II Turbo (USA 960620 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, spf2xjd, spf2t, dead_cps2, cps2_2p2b, cps2_state, init_cps2, ROT0, "bootleg", "Super Puzzle Fighter II X (Japan 960531 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, sfz2ald, sfz2al, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Street Fighter Zero 2 Alpha (Asia 960826 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, xmvsfu1d, xmvsf, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "X-Men Vs. Street Fighter (USA 961004 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, batcird, batcir, dead_cps2, cps2_4p2b, cps2_state, init_cps2, ROT0, "bootleg", "Battle Circuit (Euro 970319 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, csclub1d, csclub, dead_cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "bootleg", "Capcom Sports Club (Euro 970722 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, mshvsfu1d, mshvsf, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Marvel Super Heroes Vs. Street Fighter (USA 970625 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, sgemfd, sgemf, dead_cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "bootleg", "Super Gem Fighter Mini Mix (USA 970904 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vsavd, vsav, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Vampire Savior: The Lord of Vampire (Euro 970519 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vhunt2d, vhunt2, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Vampire Hunter 2: Darkstalkers Revenge (Japan 970913 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, vsav2d, vsav2, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Vampire Savior 2: The Lord of Vampire (Japan 970913 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, mvscud, mvsc, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Marvel Vs. Capcom: Clash of Super Heroes (USA 980123 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfa3ud, sfa3, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Street Fighter Alpha 3 (USA 980904 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, sfz3jr2d, sfa3, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Street Fighter Zero 3 (Japan 980629 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, gigawingd, gigawing, dead_cps2, cps2_2p2b, cps2_state, init_cps2, ROT0, "bootleg", "Giga Wing (USA 990222 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, gigawingjd, gigawing, dead_cps2, cps2_2p2b, cps2_state, init_cps2, ROT0, "bootleg", "Giga Wing (Japan 990223 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, 1944d, 1944, dead_cps2, cps2_2p2b, cps2_state, init_cps2, ROT0, "bootleg", "1944: The Loop Master (USA 000620 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, dimahoud, dimahoo, dead_cps2, cps2_2p3b, cps2_state, init_cps2, ROT270, "bootleg", "Dimahoo (USA 000121 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, mmatrixd, mmatrix, dead_cps2, cps2_2p1b, cps2_state, init_cps2, ROT0, "bootleg", "Mars Matrix: Hyper Solid Shooting (USA 000412 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, progearud, progear, dead_cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "bootleg", "Progear (USA 010117 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, progearjd, progear, dead_cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "bootleg", "Progear no Arashi (Japan 010117 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, progearjbl, progear, dead_cps2, cps2_2p3b, cps2_state, init_cps2, ROT0, "bootleg", "Progear no Arashi (Japan 010117) (decrypted bootleg)", MACHINE_SUPPORTS_SAVE ) // not an actual phoenix set, but works as one
GAME( 2004, hsf2d, hsf2, dead_cps2, cps2_2p6b, cps2_state, init_cps2, ROT0, "bootleg", "Hyper Street Fighter II: The Anniversary Edition (Asia 040202 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )

View File

@ -1642,8 +1642,6 @@ MACHINE_CONFIG_START(cps_state::fcrash)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1)
MCFG_PALETTE_ADD("palette", 4096)
MCFG_VIDEO_START_OVERRIDE(cps_state,cps1)
// sound hardware
SPEAKER(config, "mono").front_center();
@ -1707,8 +1705,6 @@ MACHINE_CONFIG_START(cps_state::kodb)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1)
MCFG_PALETTE_ADD("palette", 0xc00)
MCFG_VIDEO_START_OVERRIDE(cps_state,cps1)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -1750,8 +1746,6 @@ MACHINE_CONFIG_START(cps_state::sf2mdt)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1)
MCFG_PALETTE_ADD("palette", 4096)
MCFG_VIDEO_START_OVERRIDE(cps_state,cps1)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -1805,8 +1799,6 @@ MACHINE_CONFIG_START(cps_state::knightsb)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1)
MCFG_PALETTE_ADD("palette", 0xc00)
MCFG_VIDEO_START_OVERRIDE(cps_state,cps1)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -2190,8 +2182,6 @@ MACHINE_CONFIG_START(cps_state::dinopic)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1)
MCFG_PALETTE_ADD("palette", 0xc00)
MCFG_VIDEO_START_OVERRIDE(cps_state,cps1)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -2346,7 +2336,6 @@ MACHINE_CONFIG_START(cps_state::sgyxz)
MCFG_SCREEN_PALETTE("palette")
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1)
MCFG_PALETTE_ADD("palette", 0xc00)
MCFG_VIDEO_START_OVERRIDE(cps_state,cps1)
MCFG_EEPROM_SERIAL_93C46_8BIT_ADD("eeprom")
@ -2475,8 +2464,6 @@ MACHINE_CONFIG_START(cps_state::punipic)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1)
MCFG_PALETTE_ADD("palette", 0xc00)
MCFG_VIDEO_START_OVERRIDE(cps_state,cps1)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -2665,7 +2652,6 @@ MACHINE_CONFIG_START(cps_state::sf2m1)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1)
MCFG_PALETTE_ADD("palette", 0xc00)
MCFG_VIDEO_START_OVERRIDE(cps_state,cps1)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -3048,8 +3034,6 @@ MACHINE_CONFIG_START(cps_state::slampic)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1)
MCFG_PALETTE_ADD("palette", 0xc00)
MCFG_VIDEO_START_OVERRIDE(cps_state,cps1)
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -3149,8 +3133,6 @@ MACHINE_CONFIG_START(cps_state::varthb)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cps1)
MCFG_PALETTE_ADD("palette", 0xc00)
MCFG_VIDEO_START_OVERRIDE(cps_state,cps1)
/* sound hardware */
SPEAKER(config, "mono").front_center();

View File

@ -100,41 +100,36 @@ struct CPS1config
class cps_state : public driver_device
{
public:
cps_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_mainram(*this, "mainram"),
m_gfxram(*this, "gfxram"),
m_cps_a_regs(*this, "cps_a_regs"),
m_cps_b_regs(*this, "cps_b_regs"),
m_qsound_sharedram1(*this, "qsound_ram1"),
m_qsound_sharedram2(*this, "qsound_ram2"),
m_objram1(*this, "objram1"),
m_objram2(*this, "objram2"),
m_output(*this, "output"),
m_io_in0(*this, "IN0"),
m_io_in1(*this, "IN1"),
m_cps2_dial_type(0),
m_ecofghtr_dial_direction0(0),
m_ecofghtr_dial_direction1(0),
m_ecofghtr_dial_last0(0),
m_ecofghtr_dial_last1(0),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_oki(*this, "oki"),
m_m48t35(*this,"m48t35"),
m_msm_1(*this, "msm1"),
m_msm_2(*this, "msm2"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_soundlatch(*this, "soundlatch"),
m_soundlatch2(*this, "soundlatch2"),
m_decrypted_opcodes(*this, "decrypted_opcodes"),
m_region_key(*this, "key"),
m_region_stars(*this, "stars"),
m_led_cboard(*this, "led_cboard%u", 0U)
cps_state(const machine_config &mconfig, device_type type, const char *tag)
: cps_state(mconfig, type, tag, 1)
{ }
protected:
cps_state(const machine_config &mconfig, device_type type, const char *tag, int version)
: driver_device(mconfig, type, tag)
, m_mainram(*this, "mainram")
, m_gfxram(*this, "gfxram")
, m_cps_a_regs(*this, "cps_a_regs")
, m_cps_b_regs(*this, "cps_b_regs")
, m_qsound_sharedram1(*this, "qsound_ram1")
, m_qsound_sharedram2(*this, "qsound_ram2")
, m_cps_version(version)
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
, m_oki(*this, "oki")
, m_m48t35(*this,"m48t35")
, m_msm_1(*this, "msm1")
, m_msm_2(*this, "msm2")
, m_gfxdecode(*this, "gfxdecode")
, m_screen(*this, "screen")
, m_palette(*this, "palette")
, m_soundlatch(*this, "soundlatch")
, m_soundlatch2(*this, "soundlatch2")
, m_region_stars(*this, "stars")
, m_led_cboard(*this, "led_cboard%u", 0U)
{ }
public:
DECLARE_READ16_MEMBER(cps1_hack_dsw_r);
DECLARE_READ16_MEMBER(cps1_in1_r);
DECLARE_READ16_MEMBER(cps1_in2_r);
@ -162,11 +157,6 @@ public:
DECLARE_READ16_MEMBER(cps1_cps_b_r);
DECLARE_WRITE16_MEMBER(cps1_cps_b_w);
DECLARE_WRITE16_MEMBER(cps1_gfxram_w);
DECLARE_WRITE16_MEMBER(cps2_objram_bank_w);
DECLARE_READ16_MEMBER(cps2_objram1_r);
DECLARE_READ16_MEMBER(cps2_objram2_r);
DECLARE_WRITE16_MEMBER(cps2_objram1_w);
DECLARE_WRITE16_MEMBER(cps2_objram2_w);
DECLARE_WRITE8_MEMBER(cps1_oki_pin7_w);
DECLARE_WRITE16_MEMBER(sf2m1_layer_w);
DECLARE_WRITE16_MEMBER(sf2m3_layer_w);
@ -186,15 +176,6 @@ public:
void init_punisher();
void init_wof();
void init_ganbare();
void init_cps2_video();
void init_cps2();
void init_cps2nc();
void init_cps2crypt();
void init_ssf2tb();
void init_pzloop2();
void init_singbrd();
void init_gigaman2();
void init_ecofghtr();
void init_sf2dongb();
void init_sf2ceblp();
TILEMAP_MAPPER_MEMBER(tilemap0_scan);
@ -204,22 +185,18 @@ public:
TILE_GET_INFO_MEMBER(get_tile1_info);
TILE_GET_INFO_MEMBER(get_tile2_info);
DECLARE_MACHINE_START(cps1);
DECLARE_VIDEO_START(cps1);
virtual void video_start() override;
DECLARE_MACHINE_START(common);
DECLARE_MACHINE_START(cps2);
DECLARE_VIDEO_START(cps2);
DECLARE_MACHINE_START(qsound);
DECLARE_MACHINE_START(ganbare);
DECLARE_MACHINE_RESET(cps);
DECLARE_VIDEO_START(cps);
DECLARE_MACHINE_START(sf2m1);
virtual void render_layers(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_cps1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(screen_vblank_cps1);
INTERRUPT_GEN_MEMBER(cps1_interrupt);
TIMER_DEVICE_CALLBACK_MEMBER(ganbare_interrupt);
IRQ_CALLBACK_MEMBER(cps1_int_ack);
TIMER_DEVICE_CALLBACK_MEMBER(cps2_interrupt);
TIMER_CALLBACK_MEMBER(cps2_update_digital_volume);
void kabuki_setup(void (*decode)(uint8_t *src, uint8_t *dst));
@ -274,38 +251,19 @@ public:
/* cps video */
inline uint16_t *cps1_base( int offset, int boundary );
void cps1_get_video_base();
void unshuffle(uint64_t *buf, int len);
void cps2_gfx_decode();
int gfxrom_bank_mapper(int type, int code);
void cps1_update_transmasks();
void cps1_build_palette(const uint16_t* const palette_base);
void cps1_find_last_sprite();
virtual void find_last_sprite();
void cps1_render_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void cps2_find_last_sprite();
void cps2_render_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int *primasks);
void cps1_render_stars(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void cps1_render_layer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int layer, int primask);
void cps1_render_high_layer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int layer);
void cps2_set_sprite_priorities();
void cps2_objram_latch();
uint16_t *cps2_objbase();
/* cps2 driver */
void init_digital_volume();
DECLARE_READ16_MEMBER(gigaman2_dummyqsound_r);
DECLARE_WRITE16_MEMBER(gigaman2_dummyqsound_w);
void gigaman2_gfx_reorder();
DECLARE_WRITE16_MEMBER(cps2_eeprom_port_w);
DECLARE_READ16_MEMBER(cps2_qsound_volume_r);
DECLARE_READ16_MEMBER(kludge_r);
DECLARE_READ16_MEMBER(joy_or_paddle_r);
DECLARE_READ16_MEMBER(joy_or_paddle_ecofghtr_r);
DECLARE_WRITE_LINE_MEMBER(m5205_int1);
DECLARE_WRITE_LINE_MEMBER(m5205_int2);
void cps2(machine_config &config);
void gigaman2(machine_config &config);
void dead_cps2(machine_config &config);
void cawingbl(machine_config &config);
void sf2mdt(machine_config &config);
void sf2m1(machine_config &config);
@ -328,9 +286,6 @@ public:
void wofhfh(machine_config &config);
void cps1_10MHz(machine_config &config);
void pang3(machine_config &config);
void cps2_map(address_map &map);
void dead_cps2_map(address_map &map);
void decrypted_opcodes_map(address_map &map);
void dinopic_map(address_map &map);
void fcrash_map(address_map &map);
void forgottn_map(address_map &map);
@ -372,16 +327,8 @@ protected:
optional_shared_ptr<uint8_t> m_qsound_sharedram1;
optional_shared_ptr<uint8_t> m_qsound_sharedram2;
std::unique_ptr<uint8_t[]> m_decrypt_kabuki;
// cps2
optional_shared_ptr<uint16_t> m_objram1;
optional_shared_ptr<uint16_t> m_objram2;
optional_shared_ptr<uint16_t> m_output;
optional_ioport m_io_in0;
optional_ioport m_io_in1;
std::unique_ptr<uint16_t[]> m_cps2_buffered_obj;
// game-specific
std::unique_ptr<uint16_t[]> m_gigaman2_dummyqsound_ram;
uint16_t sf2ceblp_prot;
/* video-related */
@ -403,21 +350,6 @@ protected:
int m_stars2x;
int m_stars2y;
int m_last_sprite_offset; /* Offset of the last sprite */
int m_cps2_last_sprite_offset; /* Offset of the last sprite */
int m_pri_ctrl; /* Sprite layer priorities */
int m_objram_bank;
/* misc */
int m_readpaddle; // pzloop2
int m_cps2networkpresent;
int m_cps2digitalvolumelevel;
int m_cps2disabledigitalvolume;
emu_timer *m_digital_volume_timer;
int m_cps2_dial_type;
int m_ecofghtr_dial_direction0;
int m_ecofghtr_dial_direction1;
int m_ecofghtr_dial_last0;
int m_ecofghtr_dial_last1;
/* fcrash sound hw */
@ -462,12 +394,111 @@ protected:
required_device<palette_device> m_palette;
optional_device<generic_latch_8_device> m_soundlatch;
optional_device<generic_latch_8_device> m_soundlatch2;
optional_shared_ptr<uint16_t> m_decrypted_opcodes;
optional_memory_region m_region_key;
optional_memory_region m_region_stars;
output_finder<3> m_led_cboard;
};
class cps2_state : public cps_state
{
public:
cps2_state(const machine_config &mconfig, device_type type, const char *tag)
: cps_state(mconfig, type, tag, 2)
, m_decrypted_opcodes(*this, "decrypted_opcodes")
, m_region_key(*this, "key")
, m_qsound(*this, "qsound")
, m_objram1(*this, "objram1")
, m_objram2(*this, "objram2")
, m_output(*this, "output")
, m_io_in0(*this, "IN0")
, m_io_in1(*this, "IN1")
, m_cps2_dial_type(0)
, m_ecofghtr_dial_direction0(0)
, m_ecofghtr_dial_direction1(0)
, m_ecofghtr_dial_last0(0)
, m_ecofghtr_dial_last1(0)
{ }
void cps2(machine_config &config);
void gigaman2(machine_config &config);
void dead_cps2(machine_config &config);
void init_cps2_video();
void init_cps2();
void init_cps2nc();
void init_cps2crypt();
void init_gigaman2();
void init_ssf2tb();
void init_pzloop2();
void init_singbrd();
void init_ecofghtr();
private:
void init_digital_volume();
DECLARE_READ16_MEMBER(gigaman2_dummyqsound_r);
DECLARE_WRITE16_MEMBER(gigaman2_dummyqsound_w);
void gigaman2_gfx_reorder();
DECLARE_WRITE16_MEMBER(cps2_eeprom_port_w);
DECLARE_READ16_MEMBER(cps2_qsound_volume_r);
DECLARE_READ16_MEMBER(kludge_r);
DECLARE_READ16_MEMBER(joy_or_paddle_r);
DECLARE_READ16_MEMBER(joy_or_paddle_ecofghtr_r);
TIMER_DEVICE_CALLBACK_MEMBER(cps2_interrupt);
TIMER_CALLBACK_MEMBER(cps2_update_digital_volume);
DECLARE_WRITE16_MEMBER(cps2_objram_bank_w);
DECLARE_READ16_MEMBER(cps2_objram1_r);
DECLARE_READ16_MEMBER(cps2_objram2_r);
DECLARE_WRITE16_MEMBER(cps2_objram1_w);
DECLARE_WRITE16_MEMBER(cps2_objram2_w);
void unshuffle(uint64_t *buf, int len);
void cps2_gfx_decode();
virtual void find_last_sprite() override;
void cps2_render_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int *primasks);
void cps2_set_sprite_priorities();
void cps2_objram_latch();
uint16_t *cps2_objbase();
virtual void render_layers(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) override;
DECLARE_MACHINE_START(cps2);
virtual void video_start() override;
void cps2_map(address_map &map);
void dead_cps2_map(address_map &map);
void decrypted_opcodes_map(address_map &map);
optional_shared_ptr<uint16_t> m_decrypted_opcodes;
optional_memory_region m_region_key;
optional_device<qsound_device> m_qsound;
required_shared_ptr<uint16_t> m_objram1;
required_shared_ptr<uint16_t> m_objram2;
required_shared_ptr<uint16_t> m_output;
optional_ioport m_io_in0;
optional_ioport m_io_in1;
std::unique_ptr<uint16_t[]> m_cps2_buffered_obj;
std::unique_ptr<uint16_t[]> m_gigaman2_dummyqsound_ram;
/* video-related */
int m_cps2_last_sprite_offset; /* Offset of the last sprite */
int m_pri_ctrl; /* Sprite layer priorities */
int m_objram_bank;
/* misc */
int m_readpaddle; // pzloop2
int m_cps2networkpresent;
int m_cps2digitalvolumelevel;
int m_cps2disabledigitalvolume;
emu_timer *m_digital_volume_timer;
int m_cps2_dial_type;
int m_ecofghtr_dial_direction0;
int m_ecofghtr_dial_direction1;
int m_ecofghtr_dial_last0;
int m_ecofghtr_dial_last1;
};
/*----------- defined in drivers/cps1.c -----------*/
extern gfx_decode_entry const gfx_cps1[];

View File

@ -741,7 +741,7 @@ struct game_keys
void cps_state::init_cps2crypt()
void cps2_state::init_cps2crypt()
{
if (m_region_key)
{

View File

@ -1887,7 +1887,7 @@ WRITE16_MEMBER(cps_state::cps1_cps_b_w)
}
void cps_state::unshuffle( uint64_t *buf, int len )
void cps2_state::unshuffle( uint64_t *buf, int len )
{
int i;
uint64_t t;
@ -1911,7 +1911,7 @@ void cps_state::unshuffle( uint64_t *buf, int len )
}
void cps_state::cps2_gfx_decode()
void cps2_state::cps2_gfx_decode()
{
const int banksize = 0x200000;
int size = memregion("gfx")->bytes();
@ -1928,13 +1928,11 @@ void cps_state::init_cps1()
m_scanline2 = 0;
m_scancalls = 0;
m_last_sprite_offset = 0;
m_pri_ctrl = 0;
m_objram_bank = 0;
}
void cps_state::init_cps2_video()
void cps2_state::init_cps2_video()
{
cps2_gfx_decode();
@ -2243,7 +2241,7 @@ void cps_state::cps1_update_transmasks()
}
}
VIDEO_START_MEMBER(cps_state,cps)
void cps_state::video_start()
{
int i;
@ -2274,20 +2272,11 @@ VIDEO_START_MEMBER(cps_state,cps)
m_buffered_obj = make_unique_clear<uint16_t[]>(m_obj_size / 2);
if (m_cps_version == 2)
m_cps2_buffered_obj = make_unique_clear<uint16_t[]>(m_cps2_obj_size / 2);
/* clear RAM regions */
memset(m_gfxram, 0, m_gfxram.bytes()); /* Clear GFX RAM */
memset(m_cps_a_regs, 0, 0x40); /* Clear CPS-A registers */
memset(m_cps_b_regs, 0, 0x40); /* Clear CPS-B registers */
if (m_cps_version == 2)
{
memset(m_objram1, 0, m_cps2_obj_size);
memset(m_objram2, 0, m_cps2_obj_size);
}
/* Put in some defaults */
m_cps_a_regs[CPS1_OBJ_BASE] = 0x9200;
m_cps_a_regs[CPS1_SCROLL1_BASE] = 0x9000;
@ -2327,29 +2316,25 @@ VIDEO_START_MEMBER(cps_state,cps)
save_item(NAME(m_stars_enabled));
#endif
save_item(NAME(m_last_sprite_offset));
save_item(NAME(m_pri_ctrl));
save_item(NAME(m_objram_bank));
save_pointer(NAME(m_buffered_obj.get()), m_obj_size / 2);
if (m_cps_version == 2)
{
save_item(NAME(m_cps2_last_sprite_offset));
save_pointer(NAME(m_cps2_buffered_obj.get()), m_cps2_obj_size / 2);
}
machine().save().register_postload(save_prepost_delegate(FUNC(cps_state::cps1_get_video_base), this));
}
VIDEO_START_MEMBER(cps_state,cps1)
void cps2_state::video_start()
{
m_cps_version = 1;
VIDEO_START_CALL_MEMBER(cps);
}
cps_state::video_start();
VIDEO_START_MEMBER(cps_state,cps2)
{
m_cps_version = 2;
VIDEO_START_CALL_MEMBER(cps);
m_cps2_buffered_obj = make_unique_clear<uint16_t[]>(m_cps2_obj_size / 2);
memset(m_objram1, 0, m_cps2_obj_size);
memset(m_objram2, 0, m_cps2_obj_size);
save_item(NAME(m_cps2_last_sprite_offset));
save_pointer(NAME(m_cps2_buffered_obj.get()), m_cps2_obj_size / 2);
save_item(NAME(m_pri_ctrl));
save_item(NAME(m_objram_bank));
}
/***************************************************************************
@ -2437,7 +2422,7 @@ void cps_state::cps1_build_palette( const uint16_t* const palette_base )
***************************************************************************/
void cps_state::cps1_find_last_sprite() /* Find the offset of last sprite */
void cps_state::find_last_sprite() /* Find the offset of last sprite */
{
int offset = 0;
/* Locate the end of table marker */
@ -2628,13 +2613,13 @@ void cps_state::cps1_render_sprites( screen_device &screen, bitmap_ind16 &bitmap
WRITE16_MEMBER(cps_state::cps2_objram_bank_w)
WRITE16_MEMBER(cps2_state::cps2_objram_bank_w)
{
if (ACCESSING_BITS_0_7)
m_objram_bank = data & 1;
}
READ16_MEMBER(cps_state::cps2_objram1_r)
READ16_MEMBER(cps2_state::cps2_objram1_r)
{
if (m_objram_bank & 1)
return m_objram2[offset];
@ -2642,7 +2627,7 @@ READ16_MEMBER(cps_state::cps2_objram1_r)
return m_objram1[offset];
}
READ16_MEMBER(cps_state::cps2_objram2_r)
READ16_MEMBER(cps2_state::cps2_objram2_r)
{
if (m_objram_bank & 1)
return m_objram1[offset];
@ -2650,7 +2635,7 @@ READ16_MEMBER(cps_state::cps2_objram2_r)
return m_objram2[offset];
}
WRITE16_MEMBER(cps_state::cps2_objram1_w)
WRITE16_MEMBER(cps2_state::cps2_objram1_w)
{
if (m_objram_bank & 1)
COMBINE_DATA(&m_objram2[offset]);
@ -2658,7 +2643,7 @@ WRITE16_MEMBER(cps_state::cps2_objram1_w)
COMBINE_DATA(&m_objram1[offset]);
}
WRITE16_MEMBER(cps_state::cps2_objram2_w)
WRITE16_MEMBER(cps2_state::cps2_objram2_w)
{
if (m_objram_bank & 1)
COMBINE_DATA(&m_objram1[offset]);
@ -2666,7 +2651,7 @@ WRITE16_MEMBER(cps_state::cps2_objram2_w)
COMBINE_DATA(&m_objram2[offset]);
}
uint16_t *cps_state::cps2_objbase()
uint16_t *cps2_state::cps2_objbase()
{
int baseptr;
baseptr = 0x7000;
@ -2683,8 +2668,10 @@ uint16_t *cps_state::cps2_objbase()
}
void cps_state::cps2_find_last_sprite() /* Find the offset of last sprite */
void cps2_state::find_last_sprite() /* Find the offset of last sprite */
{
cps_state::find_last_sprite();
int offset = 0;
uint16_t *base = m_cps2_buffered_obj.get();
@ -2704,7 +2691,7 @@ void cps_state::cps2_find_last_sprite() /* Find the offset of last sprite */
m_cps2_last_sprite_offset = m_cps2_obj_size / 2 - 4;
}
void cps_state::cps2_render_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int *primasks )
void cps2_state::cps2_render_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int *primasks )
{
#define DRAWSPRITE(CODE,COLOR,FLIPX,FLIPY,SX,SY) \
{ \
@ -2954,23 +2941,110 @@ void cps_state::cps1_render_high_layer( screen_device &screen, bitmap_ind16 &bit
***************************************************************************/
void cps_state::render_layers(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
/* Draw layers (0 = sprites, 1-3 = tilemaps) */
int layercontrol = m_cps_b_regs[m_game_config->layer_control / 2];
int l0 = (layercontrol >> 0x06) & 03;
int l1 = (layercontrol >> 0x08) & 03;
int l2 = (layercontrol >> 0x0a) & 03;
int l3 = (layercontrol >> 0x0c) & 03;
screen.priority().fill(0, cliprect);
if (BIT(m_game_config->bootleg_kludge, 7))
cps1_build_palette(cps1_base(CPS1_PALETTE_BASE, m_palette_align));
cps1_render_layer(screen, bitmap, cliprect, l0, 0);
if (l1 == 0)
cps1_render_high_layer(screen, bitmap, cliprect, l0); /* prepare mask for sprites */
cps1_render_layer(screen, bitmap, cliprect, l1, 0);
if (l2 == 0)
cps1_render_high_layer(screen, bitmap, cliprect, l1); /* prepare mask for sprites */
cps1_render_layer(screen, bitmap, cliprect, l2, 0);
if (l3 == 0)
cps1_render_high_layer(screen, bitmap, cliprect, l2); /* prepare mask for sprites */
cps1_render_layer(screen, bitmap, cliprect, l3, 0);
}
void cps2_state::render_layers(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
/* Draw layers (0 = sprites, 1-3 = tilemaps) */
int layercontrol = m_cps_b_regs[m_game_config->layer_control / 2];
int l0 = (layercontrol >> 0x06) & 03;
int l1 = (layercontrol >> 0x08) & 03;
int l2 = (layercontrol >> 0x0a) & 03;
int l3 = (layercontrol >> 0x0c) & 03;
screen.priority().fill(0, cliprect);
int primasks[8], i;
int l0pri = (m_pri_ctrl >> 4 * l0) & 0x0f;
int l1pri = (m_pri_ctrl >> 4 * l1) & 0x0f;
int l2pri = (m_pri_ctrl >> 4 * l2) & 0x0f;
int l3pri = (m_pri_ctrl >> 4 * l3) & 0x0f;
#if 0
if ( (m_output[CPS2_OBJ_BASE /2] != 0x7080 && m_output[CPS2_OBJ_BASE /2] != 0x7000) ||
m_output[CPS2_OBJ_UK1 /2] != 0x807d ||
(m_output[CPS2_OBJ_UK2 /2] != 0x0000 && m_output[CPS2_OBJ_UK2 /2] != 0x1101 && m_output[CPS2_OBJ_UK2 /2] != 0x0001))
popmessage("base %04x uk1 %04x uk2 %04x",
m_output[CPS2_OBJ_BASE /2],
m_output[CPS2_OBJ_UK1 /2],
m_output[CPS2_OBJ_UK2 /2]);
if (0 && machine().input().code_pressed(KEYCODE_Z))
popmessage("order: %d (%d) %d (%d) %d (%d) %d (%d)",l0,l0pri,l1,l1pri,l2,l2pri,l3,l3pri);
#endif
/* take out the CPS1 sprites layer */
if (l0 == 0) { l0 = l1; l1 = 0; l0pri = l1pri; }
if (l1 == 0) { l1 = l2; l2 = 0; l1pri = l2pri; }
if (l2 == 0) { l2 = l3; l3 = 0; l2pri = l3pri; }
{
int mask0 = 0xaa;
int mask1 = 0xcc;
if (l0pri > l1pri) mask0 &= ~0x88;
if (l0pri > l2pri) mask0 &= ~0xa0;
if (l1pri > l2pri) mask1 &= ~0xc0;
primasks[0] = 0xff;
for (i = 1; i < 8; i++)
{
if (i <= l0pri && i <= l1pri && i <= l2pri)
{
primasks[i] = 0xfe;
continue;
}
primasks[i] = 0;
if (i <= l0pri) primasks[i] |= mask0;
if (i <= l1pri) primasks[i] |= mask1;
if (i <= l2pri) primasks[i] |= 0xf0;
}
}
cps1_render_layer(screen, bitmap, cliprect, l0, 1);
cps1_render_layer(screen, bitmap, cliprect, l1, 2);
cps1_render_layer(screen, bitmap, cliprect, l2, 4);
cps2_render_sprites(screen, bitmap, cliprect, primasks);
}
uint32_t cps_state::screen_update_cps1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int layercontrol, l0, l1, l2, l3;
int videocontrol = m_cps_a_regs[CPS1_VIDEOCONTROL];
flip_screen_set(videocontrol & 0x8000);
layercontrol = m_cps_b_regs[m_game_config->layer_control / 2];
/* Get video memory base registers */
cps1_get_video_base();
/* Find the offset of the last sprite in the sprite table */
cps1_find_last_sprite();
if (m_cps_version == 2)
cps2_find_last_sprite();
find_last_sprite();
cps1_update_transmasks();
@ -3020,89 +3094,7 @@ uint32_t cps_state::screen_update_cps1(screen_device &screen, bitmap_ind16 &bitm
cps1_render_stars(screen, bitmap, cliprect);
}
/* Draw layers (0 = sprites, 1-3 = tilemaps) */
l0 = (layercontrol >> 0x06) & 03;
l1 = (layercontrol >> 0x08) & 03;
l2 = (layercontrol >> 0x0a) & 03;
l3 = (layercontrol >> 0x0c) & 03;
screen.priority().fill(0, cliprect);
if (m_cps_version == 1)
{
if (BIT(m_game_config->bootleg_kludge, 7))
cps1_build_palette(cps1_base(CPS1_PALETTE_BASE, m_palette_align));
cps1_render_layer(screen, bitmap, cliprect, l0, 0);
if (l1 == 0)
cps1_render_high_layer(screen, bitmap, cliprect, l0); /* prepare mask for sprites */
cps1_render_layer(screen, bitmap, cliprect, l1, 0);
if (l2 == 0)
cps1_render_high_layer(screen, bitmap, cliprect, l1); /* prepare mask for sprites */
cps1_render_layer(screen, bitmap, cliprect, l2, 0);
if (l3 == 0)
cps1_render_high_layer(screen, bitmap, cliprect, l2); /* prepare mask for sprites */
cps1_render_layer(screen, bitmap, cliprect, l3, 0);
}
else
{
int l0pri, l1pri, l2pri, l3pri;
int primasks[8], i;
l0pri = (m_pri_ctrl >> 4 * l0) & 0x0f;
l1pri = (m_pri_ctrl >> 4 * l1) & 0x0f;
l2pri = (m_pri_ctrl >> 4 * l2) & 0x0f;
l3pri = (m_pri_ctrl >> 4 * l3) & 0x0f;
#if 0
if ( (m_output[CPS2_OBJ_BASE /2] != 0x7080 && m_output[CPS2_OBJ_BASE /2] != 0x7000) ||
m_output[CPS2_OBJ_UK1 /2] != 0x807d ||
(m_output[CPS2_OBJ_UK2 /2] != 0x0000 && m_output[CPS2_OBJ_UK2 /2] != 0x1101 && m_output[CPS2_OBJ_UK2 /2] != 0x0001))
popmessage("base %04x uk1 %04x uk2 %04x",
m_output[CPS2_OBJ_BASE /2],
m_output[CPS2_OBJ_UK1 /2],
m_output[CPS2_OBJ_UK2 /2]);
if (0 && machine().input().code_pressed(KEYCODE_Z))
popmessage("order: %d (%d) %d (%d) %d (%d) %d (%d)",l0,l0pri,l1,l1pri,l2,l2pri,l3,l3pri);
#endif
/* take out the CPS1 sprites layer */
if (l0 == 0) { l0 = l1; l1 = 0; l0pri = l1pri; }
if (l1 == 0) { l1 = l2; l2 = 0; l1pri = l2pri; }
if (l2 == 0) { l2 = l3; l3 = 0; l2pri = l3pri; }
{
int mask0 = 0xaa;
int mask1 = 0xcc;
if (l0pri > l1pri) mask0 &= ~0x88;
if (l0pri > l2pri) mask0 &= ~0xa0;
if (l1pri > l2pri) mask1 &= ~0xc0;
primasks[0] = 0xff;
for (i = 1; i < 8; i++)
{
if (i <= l0pri && i <= l1pri && i <= l2pri)
{
primasks[i] = 0xfe;
continue;
}
primasks[i] = 0;
if (i <= l0pri) primasks[i] |= mask0;
if (i <= l1pri) primasks[i] |= mask1;
if (i <= l2pri) primasks[i] |= 0xf0;
}
}
cps1_render_layer(screen, bitmap, cliprect, l0, 1);
cps1_render_layer(screen, bitmap, cliprect, l1, 2);
cps1_render_layer(screen, bitmap, cliprect, l2, 4);
cps2_render_sprites(screen, bitmap, cliprect, primasks);
}
render_layers(screen, bitmap, cliprect);
return 0;
}
@ -3123,12 +3115,12 @@ WRITE_LINE_MEMBER(cps_state::screen_vblank_cps1)
}
}
void cps_state::cps2_set_sprite_priorities()
void cps2_state::cps2_set_sprite_priorities()
{
m_pri_ctrl = m_output[CPS2_OBJ_PRI /2];
}
void cps_state::cps2_objram_latch()
void cps2_state::cps2_objram_latch()
{
cps2_set_sprite_priorities();
memcpy(m_cps2_buffered_obj.get(), cps2_objbase(), m_cps2_obj_size);