diff options
author | 2020-04-18 13:24:00 +0100 | |
---|---|---|
committer | 2020-04-18 08:24:00 -0400 | |
commit | e2c500de7595517e7882c6b013d4172a15b9b816 (patch) | |
tree | c2d56d630ab71060636e91318bae59b525f706df | |
parent | 8c333311f116149d3282bd44731ef3f655b918fa (diff) |
wofabl stuff (#6565)
wofabl: return to old (bad) gfx rom 12 (see #6556 comments)
both games:
remove eeprom device (real pcbs have 3x8pos dipsw, no eeprom)
add some dip switch settings
fix player 3 inputs
minor priority tweak
-rw-r--r-- | src/mame/drivers/fcrash.cpp | 390 | ||||
-rw-r--r-- | src/mame/includes/fcrash.h | 6 |
2 files changed, 261 insertions, 135 deletions
diff --git a/src/mame/drivers/fcrash.cpp b/src/mame/drivers/fcrash.cpp index 00a157c0558..e2e49365605 100644 --- a/src/mame/drivers/fcrash.cpp +++ b/src/mame/drivers/fcrash.cpp @@ -83,9 +83,13 @@ fcrash, kodb: Old sprites show on next screen. Patch used. sf2m1: Crowd is missing. Plane's tail comes off a bit. Patch used. wofabl: Old sprites left behind - doesn't seem to write end-of-table marker when sprite table is empty. Priority problems - doesn't seem to write the layer mask values anywhere. -sgyxz: Same as wofabl, plus sprite alignment issues and missing foreground layer. + Incorrect layer ordering during attract - writes invalid layer order values to layer control reg (bits 6-13). + Glitched level 1 trees - bad data in gfx rom 12 but dump is confirmed correct. https://youtu.be/RWKhBzwH0Gk +sgyxz: Priority problems - doesn't seem to write the layer mask values anywhere. Patch used. + Missing foreground trees on level 1. brightness circuity present on pcb? + sgyxz no wofabl no others tbc... assume yes for now */ @@ -296,6 +300,12 @@ WRITE16_MEMBER(fcrash_state::varthb_layer2_w) m_cps_a_regs[0x06 / 2] = data; } +READ16_MEMBER(fcrash_state::sgyxz_dsw_r) +{ + int in = m_sgyxz_dsw[offset]->read(); + return (in << 8) | 0xff; +} + void fcrash_state::fcrash(machine_config &config) { @@ -526,6 +536,7 @@ void fcrash_state::sgyxz(machine_config &config) m_audiocpu->set_addrmap(AS_PROGRAM, &fcrash_state::sgyxz_sound_map); MCFG_MACHINE_START_OVERRIDE(fcrash_state, sgyxz) + MCFG_MACHINE_RESET_OVERRIDE(fcrash_state, sgyxz) /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); @@ -539,8 +550,6 @@ void fcrash_state::sgyxz(machine_config &config) GFXDECODE(config, m_gfxdecode, m_palette, gfx_cps1); PALETTE(config, m_palette, palette_device::BLACK).set_entries(0xc00); - EEPROM_93C46_8BIT(config, "eeprom"); - /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -559,10 +568,7 @@ void fcrash_state::sgyxz(machine_config &config) void fcrash_state::wofabl(machine_config &config) { sgyxz(config); - m_maincpu->set_addrmap(AS_PROGRAM, &fcrash_state::wofabl_map); - - MCFG_MACHINE_START_OVERRIDE(fcrash_state, wofabl) } void fcrash_state::varthb(machine_config &config) @@ -659,13 +665,14 @@ void fcrash_state::sgyxz_map(address_map &map) map(0x800100, 0x80013f).ram().share("cps_a_regs"); /* CPS-A custom */ map(0x800140, 0x80017f).ram().share("cps_b_regs"); /* CPS-B custom */ map(0x880000, 0x880001).portr("IN1"); /* Player input ports */ - map(0x880006, 0x88000d).r(FUNC(fcrash_state::cps1_dsw_r)); /* System input ports / Dip Switches */ + map(0x880006, 0x880007).portr("IN0"); /* System input ports + Player 3 controls */ + map(0x880008, 0x88000d).r(FUNC(fcrash_state::sgyxz_dsw_r)); /* Dip Switches */ map(0x88000e, 0x88000f).w(FUNC(fcrash_state::cps1_soundlatch_w)); - map(0x880e78, 0x880e79).r(FUNC(fcrash_state::cps1_in2_r)); /* Player 3 controls (later games) */ + map(0x880e78, 0x880e79).nopr(); // reads just once at start, bug? map(0x890000, 0x890001).w(FUNC(fcrash_state::cps1_soundlatch2_w)); map(0x900000, 0x92ffff).ram().w(FUNC(fcrash_state::cps1_gfxram_w)).share("gfxram"); map(0xf1c004, 0xf1c005).w(FUNC(fcrash_state::cpsq_coinctrl2_w)); /* Coin control2 (later games) */ - map(0xf1c006, 0xf1c007).portr("EEPROMIN").portw("EEPROMOUT"); + map(0xf1c006, 0xf1c007).noprw(); // doesn't have an eeprom map(0xff0000, 0xffffff).ram().share("mainram"); } @@ -677,12 +684,12 @@ void fcrash_state::wofabl_map(address_map &map) map(0x800140, 0x80017f).ram().share("cps_b_regs"); /* CPS-B custom */ map(0x880000, 0x880001).portr("IN1"); /* Player input ports */ map(0x880006, 0x880007).w(FUNC(fcrash_state::cps1_soundlatch_w)); - map(0x880008, 0x88000f).r(FUNC(fcrash_state::cps1_dsw_r)); /* System input ports / Dip Switches */ - map(0x880e78, 0x880e79).r(FUNC(fcrash_state::cps1_in2_r)); /* Player 3 controls (later games) */ + map(0x880008, 0x880009).portr("IN0"); /* System input ports + Player 3 controls */ + map(0x88000a, 0x88000f).r(FUNC(fcrash_state::sgyxz_dsw_r)); /* Dip Switches */ map(0x890000, 0x890001).w(FUNC(fcrash_state::cps1_soundlatch2_w)); map(0x900000, 0x92ffff).ram().w(FUNC(fcrash_state::cps1_gfxram_w)).share("gfxram"); map(0xf1c004, 0xf1c005).w(FUNC(fcrash_state::cpsq_coinctrl2_w)); /* Coin control2 (later games) */ - map(0xf1c006, 0xf1c007).portr("EEPROMIN").portw("EEPROMOUT"); + map(0xf1c006, 0xf1c007).noprw(); // doesn't have an eeprom map(0xff0000, 0xffffff).ram().share("mainram"); } @@ -752,7 +759,8 @@ void fcrash_state::ffightblb_oki_map(address_map &map) map(0x20000, 0x3ffff).bankr(m_okibank); } -MACHINE_START_MEMBER(fcrash_state,fcrash) + +MACHINE_START_MEMBER(fcrash_state, fcrash) { uint8_t *ROM = memregion("audiocpu")->base(); @@ -776,7 +784,7 @@ MACHINE_START_MEMBER(fcrash_state,fcrash) save_item(NAME(m_sample_select2)); } -MACHINE_RESET_MEMBER(fcrash_state,fcrash) +MACHINE_RESET_MEMBER(fcrash_state, fcrash) { m_sample_buffer1 = 0; m_sample_buffer2 = 0; @@ -799,7 +807,7 @@ MACHINE_START_MEMBER(fcrash_state, cawingbl) m_sprite_base = 0x1000; } -MACHINE_START_MEMBER(fcrash_state,kodb) +MACHINE_START_MEMBER(fcrash_state, kodb) { m_layer_enable_reg = 0x20; m_layer_mask_reg[0] = 0x2e; @@ -848,22 +856,55 @@ MACHINE_START_MEMBER(fcrash_state, sf2m1) m_sprite_x_offset = 0; } -MACHINE_START_MEMBER(fcrash_state,sgyxz) +MACHINE_START_MEMBER(fcrash_state, sgyxz) { - MACHINE_START_CALL_MEMBER(kodb); + m_layer_enable_reg = 0x20; + // palette_control = 0x2a + + // layer priority masks: + // clears 0x28, 0x2c, 0x2e at boot, then never writes any layer mask values anywhere outside main ram. + // (bootleggers have nop'd the original code) + // assume the bootleg h/w just uses some fixed values (set in machine_reset), just use any locations the game doesn't overwrite: + m_layer_mask_reg[0] = 0x38; + m_layer_mask_reg[1] = 0x3a; + m_layer_mask_reg[2] = 0x3c; + m_layer_mask_reg[3] = 0x3e; + m_layer_scroll1x_offset = 0x40; m_layer_scroll2x_offset = 0x40; m_layer_scroll3x_offset = 0x40; + m_sprite_base = 0x1000; + m_sprite_list_end_marker = 0x8000; + m_sprite_x_offset = 0; + membank("bank1")->configure_entries(0, 2, memregion("audiocpu")->base() + 0x10000, 0x4000); } -MACHINE_START_MEMBER(fcrash_state, wofabl) +MACHINE_RESET_MEMBER(fcrash_state, sgyxz) { - MACHINE_START_CALL_MEMBER(sgyxz); - m_layer_mask_reg[2] = 0x26; // uses 0x2a for palette control reg + // assume some fixed values for layer masks (game never writes any outside main ram) + m_cps_b_regs[m_layer_mask_reg[2] / 2] = 0x1ff; + m_cps_b_regs[m_layer_mask_reg[3] / 2] = 0x1ff; +} + +MACHINE_START_MEMBER(fcrash_state, ffightblb) +{ + m_layer_enable_reg = 0x20; + m_layer_mask_reg[0] = 0x26; + m_layer_mask_reg[1] = 0x30; + m_layer_mask_reg[2] = 0x28; + m_layer_mask_reg[3] = 0x32; + m_layer_scroll1x_offset = 0x00; + m_layer_scroll2x_offset = 0x08; + m_layer_scroll3x_offset = 0x04; + m_sprite_base = 0x5008; // check this m_sprite_list_end_marker = 0x8000; + m_sprite_x_offset = -0x38; + + m_okibank->configure_entries(0, 4, memregion("oki")->base() + 0x20000, 0x20000); } + void fcrash_state::init_cawingbl() { m_maincpu->space(AS_PROGRAM).install_read_port(0x882000, 0x882001, "IN1"); @@ -904,22 +945,6 @@ void fcrash_state::init_sf2m1() init_mtwinsb(); } -MACHINE_START_MEMBER(fcrash_state,ffightblb) -{ - m_layer_enable_reg = 0x20; - m_layer_mask_reg[0] = 0x26; - m_layer_mask_reg[1] = 0x30; - m_layer_mask_reg[2] = 0x28; - m_layer_mask_reg[3] = 0x32; - m_layer_scroll1x_offset = 0x00; - m_layer_scroll2x_offset = 0x08; - m_layer_scroll3x_offset = 0x04; - m_sprite_base = 0x5008; // check this - m_sprite_list_end_marker = 0x8000; - m_sprite_x_offset = -0x38; - - m_okibank->configure_entries(0, 4, memregion("oki")->base() + 0x20000, 0x20000); -} #define CPS1_COINAGE_1 \ PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) ) \ @@ -983,19 +1008,19 @@ static INPUT_PORTS_START( fcrash ) PORT_START("DSWB") PORT_DIPNAME( 0x07, 0x04, "Difficulty Level 1" ) - PORT_DIPSETTING( 0x07, DEF_STR( Easiest ) ) // "01" - PORT_DIPSETTING( 0x06, DEF_STR( Easier ) ) // "02" - PORT_DIPSETTING( 0x05, DEF_STR( Easy ) ) // "03" - PORT_DIPSETTING( 0x04, DEF_STR( Normal ) ) // "04" - PORT_DIPSETTING( 0x03, DEF_STR( Medium ) ) // "05" - PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) // "06" - PORT_DIPSETTING( 0x01, DEF_STR( Harder ) ) // "07" - PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) // "08" + PORT_DIPSETTING( 0x07, DEF_STR( Easiest ) ) // "01" + PORT_DIPSETTING( 0x06, DEF_STR( Easier ) ) // "02" + PORT_DIPSETTING( 0x05, DEF_STR( Easy ) ) // "03" + PORT_DIPSETTING( 0x04, DEF_STR( Normal ) ) // "04" + PORT_DIPSETTING( 0x03, DEF_STR( Medium ) ) // "05" + PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) // "06" + PORT_DIPSETTING( 0x01, DEF_STR( Harder ) ) // "07" + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) // "08" PORT_DIPNAME( 0x18, 0x10, "Difficulty Level 2" ) - PORT_DIPSETTING( 0x18, DEF_STR( Easy ) ) // "01" - PORT_DIPSETTING( 0x10, DEF_STR( Normal ) ) // "02" - PORT_DIPSETTING( 0x08, DEF_STR( Hard ) ) // "03" - PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) // "04" + PORT_DIPSETTING( 0x18, DEF_STR( Easy ) ) // "01" + PORT_DIPSETTING( 0x10, DEF_STR( Normal ) ) // "02" + PORT_DIPSETTING( 0x08, DEF_STR( Hard ) ) // "03" + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) // "04" PORT_DIPNAME( 0x60, 0x60, DEF_STR( Bonus_Life ) ) PORT_DIPSETTING( 0x60, "100k" ) PORT_DIPSETTING( 0x40, "200k" ) @@ -1079,12 +1104,12 @@ static INPUT_PORTS_START( cawingbl ) PORT_START("DSWA") CPS1_COINAGE_1 PORT_DIPNAME( 0x40, 0x40, "2 Coins to Start, 1 to Continue" ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) // Overrides all other coinage settings - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) // according to manual - PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) // This switch is not documented + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) // Overrides all other coinage settings + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) // according to manual + PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) // This switch is not documented PORT_START("DSWB") - PORT_DIPNAME( 0x07, 0x04, "Difficulty Level (Enemy's Strength)" ) PORT_DIPLOCATION("SW(B):1,2,3") + PORT_DIPNAME( 0x07, 0x04, "Difficulty Level (Enemy's Strength)" ) PORT_DIPLOCATION("SW(B):1,2,3") PORT_DIPSETTING( 0x07, "1 (Easiest)" ) PORT_DIPSETTING( 0x06, "2" ) PORT_DIPSETTING( 0x05, "3" ) @@ -1093,34 +1118,34 @@ static INPUT_PORTS_START( cawingbl ) PORT_DIPSETTING( 0x02, "6" ) PORT_DIPSETTING( 0x01, "7" ) PORT_DIPSETTING( 0x00, "8 (Hardest)" ) - PORT_DIPNAME( 0x18, 0x18, "Difficulty Level (Player's Strength)" ) PORT_DIPLOCATION("SW(B):4,5") + PORT_DIPNAME( 0x18, 0x18, "Difficulty Level (Player's Strength)" ) PORT_DIPLOCATION("SW(B):4,5") PORT_DIPSETTING( 0x10, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x18, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x08, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW(B):6" ) // This switch is not documented - PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW(B):7" ) // This switch is not documented - PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW(B):8" ) // This switch is not documented + PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW(B):6" ) // This switch is not documented + PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW(B):7" ) // This switch is not documented + PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW(B):8" ) // This switch is not documented PORT_START("DSWC") - PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW(C):1" ) // This switch is not documented - PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW(C):2" ) // This switch is not documented - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW(C):3") + PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW(C):1" ) // This switch is not documented + PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW(C):2" ) // This switch is not documented + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW(C):3") PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, "Freeze" ) PORT_DIPLOCATION("SW(C):4") + PORT_DIPNAME( 0x08, 0x08, "Freeze" ) PORT_DIPLOCATION("SW(C):4") PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW(C):5") + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW(C):5") PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW(C):6") + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW(C):6") PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW(C):7") + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW(C):7") PORT_DIPSETTING( 0x40, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x80, 0x80, "Game Mode") PORT_DIPLOCATION("SW(C):8") + PORT_DIPNAME( 0x80, 0x80, "Game Mode") PORT_DIPLOCATION("SW(C):8") PORT_DIPSETTING( 0x80, "Game" ) PORT_DIPSETTING( 0x00, DEF_STR( Test ) ) INPUT_PORTS_END @@ -1138,21 +1163,21 @@ static INPUT_PORTS_START( kodb ) PORT_START("DSWA") CPS1_COINAGE_2( "SW(A)" ) - PORT_DIPNAME( 0x08, 0x08, "Coin Slots" ) PORT_DIPLOCATION("SW(A):4") + PORT_DIPNAME( 0x08, 0x08, "Coin Slots" ) PORT_DIPLOCATION("SW(A):4") PORT_DIPSETTING( 0x00, "1" ) PORT_DIPSETTING( 0x08, "3" ) - PORT_DIPNAME( 0x10, 0x10, "Play Mode" ) PORT_DIPLOCATION("SW(A):5") + PORT_DIPNAME( 0x10, 0x10, "Play Mode" ) PORT_DIPLOCATION("SW(A):5") PORT_DIPSETTING( 0x00, "2 Players" ) PORT_DIPSETTING( 0x10, "3 Players" ) PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW(A):6" ) - PORT_DIPNAME( 0x40, 0x40, "2 Coins to Start, 1 to Continue" ) PORT_DIPLOCATION("SW(A):7") + PORT_DIPNAME( 0x40, 0x40, "2 Coins to Start, 1 to Continue" ) PORT_DIPLOCATION("SW(A):7") PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW(A):8" ) PORT_START("DSWB") CPS1_DIFFICULTY_1( "SW(B)" ) - PORT_DIPNAME( 0x38, 0x38, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW(B):4,5,6") + PORT_DIPNAME( 0x38, 0x38, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW(B):4,5,6") PORT_DIPSETTING( 0x30, "1" ) PORT_DIPSETTING( 0x38, "2" ) PORT_DIPSETTING( 0x28, "3" ) @@ -1161,7 +1186,7 @@ static INPUT_PORTS_START( kodb ) PORT_DIPSETTING( 0x10, "6" ) PORT_DIPSETTING( 0x08, "7" ) PORT_DIPSETTING( 0x00, "8" ) - PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW(B):7,8") + PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW(B):7,8") PORT_DIPSETTING( 0x80, "80k and every 400k" ) PORT_DIPSETTING( 0xc0, "100k and every 450k" ) PORT_DIPSETTING( 0x40, "160k and every 450k" ) @@ -1170,22 +1195,22 @@ static INPUT_PORTS_START( kodb ) PORT_START("DSWC") PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW(C):1" ) PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW(C):2" ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW(C):3") + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW(C):3") PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, "Freeze" ) PORT_DIPLOCATION("SW(C):4") + PORT_DIPNAME( 0x08, 0x08, "Freeze" ) PORT_DIPLOCATION("SW(C):4") PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW(C):5") + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW(C):5") PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW(C):6") + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW(C):6") PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW(C):7") + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW(C):7") PORT_DIPSETTING( 0x40, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x80, 0x80, "Game Mode") PORT_DIPLOCATION("SW(C):8") + PORT_DIPNAME( 0x80, 0x80, "Game Mode") PORT_DIPLOCATION("SW(C):8") PORT_DIPSETTING( 0x80, "Game" ) PORT_DIPSETTING( 0x00, DEF_STR( Test ) ) @@ -1220,32 +1245,26 @@ INPUT_PORTS_END static INPUT_PORTS_START( sgyxz ) PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) - PORT_SERVICE_NO_TOGGLE( 0x40, IP_ACTIVE_LOW ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START ("DSWA") - PORT_DIPNAME( 0x03, 0x00, "Play Mode" ) - PORT_DIPSETTING( 0x00, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x03, "Tournament" ) - PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START ("DSWB") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) - PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 1C_4C ) ) - PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START ("DSWC") - PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START3 ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_START2 ) + PORT_SERVICE_NO_TOGGLE( 0x4000, IP_ACTIVE_LOW ) // test mode doesn't work + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + // No COIN3, must use SERVICE1 to credit 3P in "3 Players, 3 Chutes" mode + // STARTx changes character during gameplay + PORT_START ("IN1") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) @@ -1253,7 +1272,7 @@ static INPUT_PORTS_START( sgyxz ) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) // special move added by bootlegger PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) @@ -1261,34 +1280,15 @@ static INPUT_PORTS_START( sgyxz ) PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) // special move added by bootlegger PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START ("IN2") /* Player 3 */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN3 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START3 ) - - PORT_START( "EEPROMIN" ) - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) - - PORT_START( "EEPROMOUT" ) - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) -INPUT_PORTS_END - -static INPUT_PORTS_START( wofabl ) - PORT_INCLUDE(sgyxz) - - PORT_MODIFY("DSWA") - PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW(A):1" ) - PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW(A):2" ) + PORT_START("DSWA") + PORT_DIPNAME( 0x03, 0x02, "Cabinet" ) PORT_DIPLOCATION("SW(A):1,2") + PORT_DIPSETTING( 0x03, "3 Players, 3 Chutes" ) + PORT_DIPSETTING( 0x02, "3 Players, 1 Chute" ) + PORT_DIPSETTING( 0x01, "2 Players, 1 Chute" ) + //PORT_DIPSETTING( 0x00, "2 Players, 1 Chute" ) PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW(A):3" ) PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW(A):4" ) PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW(A):5" ) @@ -1296,15 +1296,130 @@ static INPUT_PORTS_START( wofabl ) PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW(A):7" ) PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW(A):8" ) - PORT_MODIFY("DSWB") - PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW(B):1" ) - PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW(B):2" ) + PORT_START("DSWB") + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW(B):1,2") + PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_4C ) ) PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW(B):3" ) PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW(B):4" ) PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW(B):5" ) PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW(B):6" ) - PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW(B):7" ) + PORT_DIPNAME( 0xc0, 0xc0, "Number of Special Moves" ) PORT_DIPLOCATION("SW(B):7,8") + PORT_DIPSETTING( 0xc0, "3" ) + PORT_DIPSETTING( 0x80, "2" ) + PORT_DIPSETTING( 0x40, "1" ) + PORT_DIPSETTING( 0x00, "0" ) + + PORT_START("DSWC") + PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW(C):1" ) + PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW(C):2" ) + PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW(C):3" ) + PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW(C):4" ) + PORT_DIPNAME( 0x70, 0x60, "Number of Players" ) PORT_DIPLOCATION("SW(C):5,6,7") + PORT_DIPSETTING( 0x70, "Start 1, Continue 1" ) + PORT_DIPSETTING( 0x60, "Start 2, Continue 2" ) + PORT_DIPSETTING( 0x50, "Start 3, Continue 3" ) + PORT_DIPSETTING( 0x40, "Start 4, Continue 4" ) + PORT_DIPSETTING( 0x30, "Start 1, Continue 2" ) + PORT_DIPSETTING( 0x20, "Start 2, Continue 3" ) + PORT_DIPSETTING( 0x10, "Start 3, Continue 4" ) + PORT_DIPSETTING( 0x00, "Start 4, Continue 5" ) + PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW(C):8" ) +INPUT_PORTS_END + +static INPUT_PORTS_START( wofabl ) + PORT_START("IN0") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_COIN3 ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START3 ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_START2 ) + PORT_SERVICE_NO_TOGGLE( 0x4000, IP_ACTIVE_LOW ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START ("IN1") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSWA") + PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW(A):1,2,3,4") + PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0d, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0b, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x0a, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x09, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x07, "2 Coins Start, 1 Coin Continue" ) + PORT_DIPSETTING( 0x06, DEF_STR( Free_Play ) ) + /* setting any of these crashes the test mode config menu */ + PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW(A):5" ) // free play? + PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW(A):6" ) // 1c 8c? + PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW(A):7" ) // 2 coins start? + PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW(A):8" ) // 1c 7c? + + PORT_START("DSWB") + PORT_DIPNAME( 0x07, 0x04, "Game Difficulty" ) PORT_DIPLOCATION("SW(B):1,2,3") + PORT_DIPSETTING( 0x07, "0 (Extra Easy)" ) + PORT_DIPSETTING( 0x06, "1 (Very Easy)" ) + PORT_DIPSETTING( 0x05, "2 (Easy)" ) + PORT_DIPSETTING( 0x04, "3 (Normal)" ) + PORT_DIPSETTING( 0x03, "4 (Hard)" ) + PORT_DIPSETTING( 0x02, "5 (Very Hard)" ) + PORT_DIPSETTING( 0x01, "6 (Extra Hard)" ) + PORT_DIPSETTING( 0x00, "7 (Hardest)" ) + PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW(B):4" ) + PORT_DIPNAME( 0x70, 0x60, "Number of Players" ) PORT_DIPLOCATION("SW(B):5,6,7") + PORT_DIPSETTING( 0x70, "Start 1, Continue 1" ) + PORT_DIPSETTING( 0x60, "Start 2, Continue 2" ) + PORT_DIPSETTING( 0x50, "Start 3, Continue 3" ) + PORT_DIPSETTING( 0x40, "Start 4, Continue 4" ) + PORT_DIPSETTING( 0x30, "Start 1, Continue 2" ) + PORT_DIPSETTING( 0x20, "Start 2, Continue 3" ) + PORT_DIPSETTING( 0x10, "Start 3, Continue 4" ) + PORT_DIPSETTING( 0x00, "Start 4, Continue 5" ) PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW(B):8" ) + + PORT_START("DSWC") + PORT_DIPNAME( 0x03, 0x03, "Cabinet" ) PORT_DIPLOCATION("SW(C):1,2") + PORT_DIPSETTING( 0x03, "3 Players, 3 Chutes" ) + PORT_DIPSETTING( 0x02, "3 Players, 1 Chute" ) + PORT_DIPSETTING( 0x01, "2 Players, 1 Chute" ) + PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW(C):3" ) + PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW(C):4" ) + PORT_DIPNAME( 0x30, 0x10, "Extend" ) PORT_DIPLOCATION("SW(C):5,6") + PORT_DIPSETTING( 0x30, "No Extend" ) + PORT_DIPSETTING( 0x20, "100000 pts." ) + PORT_DIPSETTING( 0x10, "300000 pts." ) + PORT_DIPSETTING( 0x00, "100000, 300000, 500000, 1000000 pts." ) + PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW(C):7" ) + PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW(C):8" ) // crashes the test mode config menu if set INPUT_PORTS_END @@ -1825,6 +1940,13 @@ ROM_END 24mhz crystal (maincpu), 28.322 crystal (video), 3.579545 crystal (sound) sound cpu is (239 V 249521 VC5006 KABUKI DL-030P-110V) - recycled Kabuki Z80 from genuine Capcom HW? 3x8 dsws + + bootlegger hacks: + 2 extra playable characters (7 total) + can swap character during gameplay (press start to cycle) + new special move (button 3) + level order is changed + attract sequence shortened */ ROM_START( sgyxz ) ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 Code */ @@ -1877,7 +1999,7 @@ ROM_START( wofabl ) ROM_LOAD32_BYTE( "gfx9.040", 0x200000, 0x80000, CRC(f8f33a0e) SHA1(33f172b79499d4a76b53c070c0007bd1604a71bd) ) ROM_LOAD32_BYTE( "gfx10.040", 0x200001, 0x80000, CRC(6a060c6c) SHA1(49e4da9373272e5889caa79a86c39ee34087c480) ) ROM_LOAD32_BYTE( "gfx11.040", 0x200002, 0x80000, CRC(13324965) SHA1(979754ebd15a2989f92b5b7fc5bae99eb83c3593) ) - ROM_LOAD32_BYTE( "gfx12.040", 0x200003, 0x80000, CRC(808cc8f0) SHA1(55731139ba6d7d222fa17236e3e91b2e69a44046) ) + ROM_LOAD32_BYTE( "gfx12.040", 0x200003, 0x80000, CRC(c29f7b70) SHA1(95d22dcd9e2a48ddea7573d0be75225e0aae798f) ) ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code */ ROM_LOAD( "sound.512", 0x00000, 0x10000, CRC(210c376f) SHA1(0d937c86078d0a106f5636b7daf5fc0266c2c2ec) ) // identical to sgyxz @@ -2019,7 +2141,7 @@ GAME( 1993, mtwinsb, mtwins, mtwinsb, mtwins, fcrash_state, init_mtwi GAME( 1992, sf2m1, sf2ce, sf2m1, sf2, fcrash_state, init_sf2m1, ROT0, "bootleg", "Street Fighter II': Champion Edition (M1, bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // 920313 ETC GAME( 1992, sf2m9, sf2ce, sf2m1, sf2, fcrash_state, init_sf2m1, ROT0, "bootleg", "Street Fighter II': Champion Edition (M9, bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // 920313 ETC -GAME( 1999, sgyxz, wof, sgyxz, sgyxz, fcrash_state, init_cps1, ROT0, "bootleg (All-In Electronic)", "Warriors of Fate ('sgyxz' bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // 921005 - Sangokushi 2 +GAME( 1999, sgyxz, wof, sgyxz, sgyxz, cps1bl_no_brgt, init_cps1, ROT0, "bootleg (All-In Electronic)", "Warriors of Fate ('sgyxz' bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // 921005 - Sangokushi 2 GAME( 1999, wofabl, wof, wofabl, wofabl, cps1bl_no_brgt, init_cps1, ROT0, "bootleg", "Sangokushi II (bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // 921005 - Sangokushi 2 GAME( 1992, varthb, varth, varthb, varth, fcrash_state, init_mtwinsb, ROT270, "bootleg", "Varth: Operation Thunderstorm (bootleg)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/fcrash.h b/src/mame/includes/fcrash.h index 117991ecf8c..f53c94495c0 100644 --- a/src/mame/includes/fcrash.h +++ b/src/mame/includes/fcrash.h @@ -21,6 +21,7 @@ public: , m_msm_1(*this, "msm1") , m_msm_2(*this, "msm2") , m_okibank(*this, "okibank") + , m_sgyxz_dsw(*this, { "DSWA", "DSWB", "DSWC" }) { } void fcrash(machine_config &config); @@ -47,7 +48,7 @@ protected: DECLARE_MACHINE_START(mtwinsb); DECLARE_MACHINE_START(sf2m1); DECLARE_MACHINE_START(sgyxz); - DECLARE_MACHINE_START(wofabl); + DECLARE_MACHINE_RESET(sgyxz); DECLARE_WRITE16_MEMBER(fcrash_soundlatch_w); DECLARE_WRITE8_MEMBER(fcrash_snd_bankswitch_w); @@ -61,6 +62,7 @@ protected: DECLARE_WRITE16_MEMBER(sf2m1_layer_w); DECLARE_WRITE16_MEMBER(varthb_layer_w); DECLARE_WRITE16_MEMBER(varthb_layer2_w); + DECLARE_READ16_MEMBER(sgyxz_dsw_r); uint32_t screen_update_fcrash(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void fcrash_update_transmasks(); @@ -104,6 +106,8 @@ protected: optional_device<msm5205_device> m_msm_2; optional_memory_bank m_okibank; + + optional_ioport_array<3> m_sgyxz_dsw; }; class cps1bl_no_brgt : public fcrash_state |