sega/megadriv_acbl: Hook up PIC dumps for aladmdb and jparkmb. [Dirk Best, Darksoft, Hammy]

Systems promoted to working
---------------------------
Jurassic Park (bootleg of Mega Drive version)
This commit is contained in:
Dirk Best 2024-11-12 17:53:47 +01:00
parent e76b2cd790
commit 09b69a1a25
2 changed files with 123 additions and 130 deletions

View File

@ -91,7 +91,7 @@ Stephh's notes (based on the game M68000 code and some tests) :
0xff7e12.l 0x30313000 0x30313200 0x30313400
0xff7e16.l 0x30303900 0x30313200 0x30313500
3) MCU notes
3) MCU notes (obsolete, PIC emulated now)
- As I don't know how it is on real hardware, MCU simulation is more a guess than anything;
anyway, the game now runs correctly (coins are handled and settings change)
@ -150,7 +150,7 @@ Sunset Riders info
- title raster effect is broken (bug in Mega Drive code, happens with normal set too)
TODO (barek2mb):
TODO (games with PIC):
- Unknown inputs to Port B of the emulated PIC
- MCU clock frequency
- There is only a 50 MHz XTAL on the PCB, are the other clocks correct?
@ -174,10 +174,16 @@ void md_boot_state::md_bootleg_map(address_map &map)
void md_boot_mcu_state::md_boot_mcu_map(address_map &map)
{
md_bootleg_map(map);
megadriv_68k_base_map(map);
map(0x220000, 0x220001).w(FUNC(md_boot_mcu_state::mcu_w));
map(0x330000, 0x330001).r(FUNC(md_boot_mcu_state::mcu_r));
map(0x000000, 0x1fffff).rom();
// could be mirrors
map(0x100000, 0x100001).w(FUNC(md_boot_mcu_state::mcu_w)); // twinktmb, sonic2mb
map(0x200000, 0x200001).w(FUNC(md_boot_mcu_state::mcu_w)); // jparkmb, sonic3mb
map(0x220000, 0x220001).w(FUNC(md_boot_mcu_state::mcu_w)); // aladmdb, barek2mb
map(0x300000, 0x300001).r(FUNC(md_boot_mcu_state::mcu_r)); // twinktmb, sonic2mb, jparkmb, sonic3mb, barek3mba
map(0x330000, 0x330001).r(FUNC(md_boot_mcu_state::mcu_r)); // aladmdb, barek2mb
}
void md_boot_6button_state::ssf2mdb_68k_map(address_map &map)
@ -208,25 +214,6 @@ void md_boot_state::aladmdb_w(uint16_t data)
logerror("aladmdb_w : %06x - data = %04x\n",m_maincpu->pc(),data);
}
uint16_t md_boot_state::aladmdb_r()
{
if (m_maincpu->pc() == 0x1b2a56)
{
m_aladmdb_mcu_port = ioport("MCU")->read();
if (m_aladmdb_mcu_port & 0x100)
return ((m_aladmdb_mcu_port & 0x0f) | 0x100); // coin inserted, calculate the number of coins
else
return (0x100); //MCU status, needed if you fall into a pitfall
}
if (m_maincpu->pc() == 0x1b2a72) return 0x0000;
if (m_maincpu->pc() == 0x1b2d24) return (ioport("MCU")->read() & 0x00f0) | 0x1200; // difficulty
if (m_maincpu->pc() == 0x1b2d4e) return 0x0000;
logerror("aladbl_r : %06x\n",m_maincpu->pc());
return 0x0000;
}
uint16_t md_boot_state::twinktmb_r()
{
if (m_maincpu->pc() == 0x02f81e)
@ -239,18 +226,6 @@ uint16_t md_boot_state::twinktmb_r()
return 0x0000;
}
uint16_t md_boot_state::jparkmb_r()
{
if (m_maincpu->pc() == 0x1e327a)
return ioport("COIN")->read(); // TODO: coins don't respond well
if (m_maincpu->pc() == 0x1e3254) return 0x0000; // what's this? dips?
//logerror("jparkmb_r : %06x\n",m_maincpu->pc());
return 0x0000;
}
uint16_t md_boot_state::barek3mba_r() // missing PIC dump, simulated for now
{
if (m_maincpu->pc() == 0x4dbc6)
@ -356,23 +331,22 @@ void md_boot_mcu_state::mcu_portb_w(uint8_t data)
uint8_t md_boot_mcu_state::mcu_portc_r()
{
uint8_t data = 0xff;
// read dip switches
if (BIT(m_mcu_porta, 3) == 0)
return m_dsw->read();
data &= m_dsw->read();
// read from latch
if (BIT(m_mcu_porta, 1) == 0)
{
if (BIT(m_mcu_porta, 0) == 0)
return m_mcu_in_latch_lsb;
data &= m_mcu_in_latch_lsb;
else
return m_mcu_in_latch_msb;
data &= m_mcu_in_latch_msb;
}
// should never go here
logerror("mcu: read from output latch!\n");
return 0xff;
return data;
}
void md_boot_mcu_state::mcu_portc_w(uint8_t data)
@ -519,39 +493,51 @@ INPUT_PORTS_START( mk3mdb )
PORT_START("DSWC") // Not even read in this set
INPUT_PORTS_END
// Verified from M68000 code
INPUT_PORTS_START( aladmdb )
PORT_INCLUDE( md_common )
PORT_MODIFY("PAD1") // Joypad 1 (3 button + start) NOT READ DIRECTLY
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Throw") // a
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Sword") // b
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 Jump") // c
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) // start
PORT_MODIFY("PAD1")
PORT_BIT(0x0010, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(1) PORT_NAME("P1 Throw") // a
PORT_BIT(0x0020, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(1) PORT_NAME("P1 Sword") // b
PORT_BIT(0x0040, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_PLAYER(1) PORT_NAME("P1 Jump") // c
PORT_BIT(0x0080, IP_ACTIVE_LOW, IPT_START1) // start
PORT_MODIFY("PAD2") // Joypad 2 (3 button + start) NOT READ DIRECTLY - not used
PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
// not used
PORT_MODIFY("PAD2")
PORT_BIT(0x00ff, IP_ACTIVE_LOW, IPT_UNUSED)
// As I don't know how it is on real hardware, this is more a guess than anything
PORT_START("MCU")
PORT_DIPNAME( 0x07, 0x01, DEF_STR( Coinage ) ) // Code at 0x1b2a50 - unsure if there are so many settings
// PORT_DIPSETTING( 0x00, "INVALID" ) // Adds 0 credit
PORT_DIPSETTING( 0x01, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x05, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x06, DEF_STR( 1C_6C ) )
PORT_DIPSETTING( 0x07, DEF_STR( 1C_7C ) )
// PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_CUSTOM ) // To avoid it being changed and corrupting Coinage settings
PORT_DIPNAME( 0x30, 0x00, DEF_STR( Difficulty ) ) // Code at 0x1b2680
PORT_DIPSETTING( 0x10, DEF_STR( Easy ) ) // "PRACTICE"
PORT_DIPSETTING( 0x00, DEF_STR( Normal ) ) // "NORMAL"
PORT_DIPSETTING( 0x20, DEF_STR( Hard ) ) // "DIFFICULT"
// PORT_DIPSETTING( 0x30, DEF_STR( Normal ) )
PORT_DIPUNUSED( 0x40, IP_ACTIVE_HIGH )
PORT_DIPUNUSED( 0x80, IP_ACTIVE_HIGH )
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1) // Needed to avoid credits getting mad
PORT_START("DSW")
PORT_DIPNAME(0x0f, 0x0f, DEF_STR( Coinage ))
PORT_DIPSETTING( 0x05, DEF_STR( 6C_1C ))
PORT_DIPSETTING( 0x06, DEF_STR( 5C_1C ))
PORT_DIPSETTING( 0x07, DEF_STR( 4C_1C ))
PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ))
PORT_DIPSETTING( 0x01, DEF_STR( 8C_3C ))
PORT_DIPSETTING( 0x09, DEF_STR( 2C_1C ))
PORT_DIPSETTING( 0x02, DEF_STR( 5C_3C ))
PORT_DIPSETTING( 0x03, DEF_STR( 3C_2C ))
PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ))
// PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C )) // duplicate
PORT_DIPSETTING( 0x04, DEF_STR( 2C_3C ))
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_5C ))
PORT_DIPSETTING( 0x0a, DEF_STR( 1C_6C ))
PORT_DIPNAME(0x30, 0x30, DEF_STR( Difficulty )) // Code at 0x1b2680
PORT_DIPSETTING( 0x10, DEF_STR( Easy )) // "PRACTICE"
PORT_DIPSETTING( 0x30, DEF_STR( Normal )) // "NORMAL"
// PORT_DIPSETTING( 0x00, DEF_STR( Normal )) // "NORMAL" (duplicate)
PORT_DIPSETTING( 0x20, DEF_STR( Hard )) // "DIFFICULT"
PORT_DIPUNUSED(0x40, IP_ACTIVE_LOW)
PORT_DIPUNUSED(0x80, IP_ACTIVE_LOW)
PORT_START("IN0")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_COIN1)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNUSED)
INPUT_PORTS_END
INPUT_PORTS_START( sonic2mb )
@ -597,11 +583,20 @@ INPUT_PORTS_START( sonic2mb )
INPUT_PORTS_END
INPUT_PORTS_START( twinktmb )
PORT_INCLUDE( aladmdb )
PORT_INCLUDE( md_common )
PORT_MODIFY("PAD1") // Joypad 1 (3 button + start) NOT READ DIRECTLY
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Throw") // a
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Sword") // b
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 Jump") // c
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) // start
PORT_MODIFY("PAD2") // Joypad 2 (3 button + start) NOT READ DIRECTLY - not used
PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
// As I don't know how it is on real hardware, this is more a guess than anything
PORT_MODIFY("MCU")
PORT_START("MCU")
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW1:1")
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW1:2")
PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW1:3")
@ -623,6 +618,32 @@ INPUT_PORTS_START( twinktmb )
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
INPUT_PORTS_START( jparkmb )
PORT_INCLUDE( md_common )
// not used
PORT_MODIFY("PAD2")
PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
// not read by the mcu, but physically on the pcb
PORT_START("DSW")
PORT_DIPUNUSED_DIPLOC(0x01, 0x01, "SW1:1")
PORT_DIPUNUSED_DIPLOC(0x02, 0x02, "SW1:2")
PORT_DIPUNUSED_DIPLOC(0x04, 0x04, "SW1:3")
PORT_DIPUNUSED_DIPLOC(0x08, 0x08, "SW1:4")
PORT_DIPUNUSED_DIPLOC(0x10, 0x10, "SW1:5")
PORT_DIPUNUSED_DIPLOC(0x20, 0x20, "SW1:6")
PORT_DIPUNUSED_DIPLOC(0x40, 0x40, "SW1:7")
PORT_DIPUNUSED_DIPLOC(0x80, 0x80, "SW1:8")
PORT_START("IN0")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_COIN1)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNUSED)
INPUT_PORTS_END
INPUT_PORTS_START( sonic3mb )
PORT_INCLUDE( twinktmb )
@ -822,7 +843,7 @@ INPUT_PORTS_START( barek2 )
PORT_DIPSETTING( 0x02, DEF_STR( 5C_3C ))
PORT_DIPSETTING( 0x03, DEF_STR( 3C_2C ))
PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ))
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C )) // duplicate
// PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C )) // duplicate
PORT_DIPSETTING( 0x04, DEF_STR( 2C_3C ))
PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ))
PORT_DIPSETTING( 0x0d, DEF_STR( 1C_3C ))
@ -979,12 +1000,6 @@ void md_boot_mcu_state::md_boot_mcu(machine_config &config)
m_mcu->write_c().set(FUNC(md_boot_mcu_state::mcu_portc_w));
}
void md_boot_6button_state::machine_start()
{
md_boot_state::machine_start();
m_vdp->stop_timers();
}
void md_boot_6button_state::megadrvb_6b(machine_config &config)
{
megadrvb(config);
@ -1000,6 +1015,12 @@ void md_boot_6button_state::ssf2mdb(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &md_boot_6button_state::ssf2mdb_68k_map);
}
void md_boot_6button_state::machine_start()
{
md_boot_state::machine_start();
m_vdp->stop_timers();
}
/*************************************
*
@ -1007,23 +1028,6 @@ void md_boot_6button_state::ssf2mdb(machine_config &config)
*
*************************************/
#define ENERGY_CONSOLE_MODE 0
void md_boot_state::init_aladmdb()
{
// Game does a check @ 1afc00 with work RAM fff57c that makes it play like the original console version (i.e. 8 energy hits instead of 2)
#if ENERGY_CONSOLE_MODE
uint16_t *rom = (uint16_t *)memregion("maincpu")->base();
rom[0x1afc08/2] = 0x6600;
#endif
// 220000 = writes to mcu? 330000 = reads?
m_maincpu->space(AS_PROGRAM).install_write_handler(0x220000, 0x220001, write16smo_delegate(*this, FUNC(md_boot_state::aladmdb_w)));
m_maincpu->space(AS_PROGRAM).install_read_handler(0x330000, 0x330001, read16smo_delegate(*this, FUNC(md_boot_state::aladmdb_r)));
init_megadrij();
}
// This should be correct, the areas of the ROM that differ to the original
// after this decode look like intentional changes
void md_boot_6button_state::init_mk3mdb()
@ -1241,13 +1245,6 @@ void md_boot_state::init_twinktmb()
m_maincpu->space(AS_PROGRAM).install_read_handler(0x300000, 0x300001, read16smo_delegate(*this, FUNC(md_boot_state::twinktmb_r)));
}
void md_boot_state::init_jparkmb()
{
init_megadrij();
m_maincpu->space(AS_PROGRAM).install_write_handler(0x100000, 0x100001, write16smo_delegate(*this, FUNC(md_boot_state::aladmdb_w)));
m_maincpu->space(AS_PROGRAM).install_read_handler(0x300000, 0x300001, read16smo_delegate(*this, FUNC(md_boot_state::jparkmb_r)));
}
/*************************************
*
@ -1261,9 +1258,12 @@ ROM_START( aladmdb )
ROM_LOAD16_BYTE( "m2.bin", 0x000000, 0x080000, CRC(142a0366) SHA1(6c94aa9936cd11ccda503b52019a6721e64a32f0) )
ROM_LOAD16_BYTE( "m3.bin", 0x100001, 0x080000, CRC(0feeeb19) SHA1(bd567a33077ab9997871d21736066140d50e3d70) )
ROM_LOAD16_BYTE( "m4.bin", 0x100000, 0x080000, CRC(bc712661) SHA1(dfd554d000399e17b4ddc69761e572195ed4e1f0) )
#if 0
ROM_FILL(0x1afc08, 1, 0x66) // makes it play like the original console version (i.e. 8 energy hits instead of 2)
#endif
ROM_REGION( 0x1000, "pic", ROMREGION_ERASE00 )
ROM_LOAD( "pic16c57xtp", 0x0000, 0x1000, NO_DUMP )
ROM_REGION( 0x2000, "mcu", 0 )
ROM_LOAD( "pic16c57.bin", 0x0000, 0x2000, CRC(f35ded67) SHA1(c46f39ffe92c9d01f3b5e1380039ead488cbf41a) )
ROM_END
ROM_START( mk3mdb ) // ROMs are scrambled, we take care of the address descramble in the ROM load, and the data descramble in the init
@ -1398,8 +1398,8 @@ ROM_START( jparkmb ) // Same PCB as twinktmb, JPA-028 label
ROM_LOAD16_BYTE( "f22.bin", 0x100000, 0x080000, CRC(36337d06) SHA1(d537cff2c8ed58da146faf390c09252be359ccd1) )
ROM_LOAD16_BYTE( "f21.bin", 0x100001, 0x080000, CRC(6ede6b6b) SHA1(cf29300d9278ea03f54cf54ea582bdd8b9bbdbbd) )
ROM_REGION( 0x1000, "pic", ROMREGION_ERASE00 )
ROM_LOAD( "pic16c57xtp", 0x0000, 0x1000, NO_DUMP )
ROM_REGION( 0x2000, "mcu", 0 )
ROM_LOAD( "pic16c57.bin", 0x0000, 0x2000, CRC(4101ff42) SHA1(f00bb8a94bbbea8cda7d0cbcffc9721804e08dbd) )
ROM_END
ROM_START( barekch ) // all 27c010
@ -1426,20 +1426,20 @@ ROM_END
*************************************/
// PIC protected hardware with Mega Drive bootleg chipset marked TA-04, TA-05 and TA-06.
GAME( 1993, aladmdb, 0, megadrvb, aladmdb, md_boot_state, init_aladmdb, ROT0, "bootleg / Sega", "Aladdin (bootleg of Mega Drive version)", 0 )
GAME( 1993, sonic2mb, 0, md_bootleg, sonic2mb, md_boot_state, init_sonic2mb, ROT0, "bootleg / Sega", "Sonic The Hedgehog 2 (bootleg of Mega Drive version)", 0 ) // Flying wires going through the empty PIC space aren't completely understood
GAME( 1993, sonic3mb, 0, md_bootleg, sonic3mb, md_sonic3bl_state, init_sonic3mb, ROT0, "bootleg / Sega", "Sonic The Hedgehog 3 (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // undumped PIC
GAME( 1994, barek2mb, 0, md_boot_mcu, barek2, md_boot_mcu_state, init_megadrij, ROT0, "bootleg / Sega", "Bare Knuckle II (bootleg of Mega Drive version)", 0 ) // PCB labeled "BK-059"
GAME( 1994, barek3mba, barek3mb, megadrvb, barek3, md_boot_state, init_barek3a, ROT0, "bootleg / Sega", "Bare Knuckle III (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // undumped PIC
GAME( 1993, twinktmb, 0, md_bootleg, twinktmb, md_boot_state, init_twinktmb, ROT0, "bootleg / Sega", "Twinkle Tale (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // Needs PIC decap or simulation
GAME( 1993, jparkmb, 0, md_bootleg, twinktmb, md_boot_state, init_jparkmb, ROT0, "bootleg / Sega", "Jurassic Park (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // Needs PIC decap or simulation
GAME( 1993, aladmdb, 0, md_boot_mcu, aladmdb, md_boot_mcu_state, init_megadrij, ROT0, "bootleg / Sega", "Aladdin (bootleg of Mega Drive version)", 0 )
GAME( 1993, sonic2mb, 0, md_bootleg, sonic2mb, md_boot_state, init_sonic2mb, ROT0, "bootleg / Sega", "Sonic The Hedgehog 2 (bootleg of Mega Drive version)", 0 ) // Flying wires going through the empty PIC space aren't completely understood
GAME( 1993, sonic3mb, 0, md_bootleg, sonic3mb, md_sonic3bl_state, init_sonic3mb, ROT0, "bootleg / Sega", "Sonic The Hedgehog 3 (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // undumped PIC
GAME( 1994, barek2mb, 0, md_boot_mcu, barek2, md_boot_mcu_state, init_megadrij, ROT0, "bootleg / Sega", "Bare Knuckle II (bootleg of Mega Drive version)", 0 ) // PCB labeled "BK-059"
GAME( 1994, barek3mba, barek3mb, megadrvb, barek3, md_boot_state, init_barek3a, ROT0, "bootleg / Sega", "Bare Knuckle III (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // undumped PIC
GAME( 1993, twinktmb, 0, md_bootleg, twinktmb, md_boot_state, init_twinktmb, ROT0, "bootleg / Sega", "Twinkle Tale (bootleg of Mega Drive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // Needs PIC decap or simulation
GAME( 1993, jparkmb, 0, md_boot_mcu, jparkmb, md_boot_mcu_state, init_megadrij, ROT0, "bootleg / Sega", "Jurassic Park (bootleg of Mega Drive version)", 0 ) // PCB labeled "JPA-028"
// Scrambled bootlegs with Actel for scrambling and Mega Drive bootleg chipset marked TA-04, TA-05 and TA-06.
GAME( 1994, barekch, 0, megadrvb_6b, barekch, md_boot_6button_state, init_barekch, ROT0, "bootleg", "Bare Knuckle (scrambled bootleg of Mega Drive version)", 0 )
GAME( 1994, barek2ch, 0, md_bootleg, barek2ch, md_boot_state, init_barek2ch, ROT0, "bootleg", "Bare Knuckle II (scrambled bootleg of Mega Drive version)", 0 )
GAME( 1994, barek3mb, 0, megadrvb, barek3, md_boot_state, init_barek3, ROT0, "bootleg / Sega", "Bare Knuckle III (scrambled bootleg of Mega Drive version)", 0 )
GAME( 1994, bk3ssrmb, 0, megadrvb_6b, bk3ssrmb, md_boot_6button_state, init_bk3ssrmb, ROT0, "bootleg / Sega", "Bare Knuckle III / Sunset Riders (scrambled bootleg of Mega Drive versions)", MACHINE_NOT_WORKING ) // Currently boots as Bare Knuckle III, mechanism to switch game not emulated yet
GAME( 1994, srssf2mb, 0, megadrvb_6b, bk3ssrmb, md_boot_6button_state, init_srssf2mb, ROT0, "bootleg / Sega", "Sunset Riders / Super Street Fighter II - The New Challengers (scrambled bootleg of Mega Drive versions)", MACHINE_NOT_WORKING )
GAME( 1996, mk3mdb, 0, megadrvb_6b, mk3mdb, md_boot_6button_state, init_mk3mdb, ROT0, "bootleg / Midway", "Mortal Kombat 3 (scrambled bootleg of Mega Drive version)", 0 )
GAME( 1994, ssf2mdb, 0, ssf2mdb, ssf2mdb, md_boot_6button_state, init_megadrij, ROT0, "bootleg / Capcom", "Super Street Fighter II - The New Challengers (scrambled bootleg of Mega Drive version)", 0 )
GAME( 1993, srmdb, 0, megadrvb, srmdb, md_boot_state, init_srmdb, ROT0, "bootleg / Konami", "Sunset Riders (scrambled bootleg of Mega Drive version)", 0 )
GAME( 1994, barekch, 0, megadrvb_6b, barekch, md_boot_6button_state, init_barekch, ROT0, "bootleg", "Bare Knuckle (scrambled bootleg of Mega Drive version)", 0 )
GAME( 1994, barek2ch, 0, md_bootleg, barek2ch, md_boot_state, init_barek2ch, ROT0, "bootleg", "Bare Knuckle II (scrambled bootleg of Mega Drive version)", 0 )
GAME( 1994, barek3mb, 0, megadrvb, barek3, md_boot_state, init_barek3, ROT0, "bootleg / Sega", "Bare Knuckle III (scrambled bootleg of Mega Drive version)", 0 )
GAME( 1994, bk3ssrmb, 0, megadrvb_6b, bk3ssrmb, md_boot_6button_state, init_bk3ssrmb, ROT0, "bootleg / Sega", "Bare Knuckle III / Sunset Riders (scrambled bootleg of Mega Drive versions)", MACHINE_NOT_WORKING ) // Currently boots as Bare Knuckle III, mechanism to switch game not emulated yet
GAME( 1994, srssf2mb, 0, megadrvb_6b, bk3ssrmb, md_boot_6button_state, init_srssf2mb, ROT0, "bootleg / Sega", "Sunset Riders / Super Street Fighter II - The New Challengers (scrambled bootleg of Mega Drive versions)", MACHINE_NOT_WORKING )
GAME( 1996, mk3mdb, 0, megadrvb_6b, mk3mdb, md_boot_6button_state, init_mk3mdb, ROT0, "bootleg / Midway", "Mortal Kombat 3 (scrambled bootleg of Mega Drive version)", 0 )
GAME( 1994, ssf2mdb, 0, ssf2mdb, ssf2mdb, md_boot_6button_state, init_megadrij, ROT0, "bootleg / Capcom", "Super Street Fighter II - The New Challengers (scrambled bootleg of Mega Drive version)", 0 )
GAME( 1993, srmdb, 0, megadrvb, srmdb, md_boot_state, init_srmdb, ROT0, "bootleg / Konami", "Sunset Riders (scrambled bootleg of Mega Drive version)", 0 )

View File

@ -18,14 +18,12 @@ public:
void megadrvb(machine_config &config);
void md_bootleg(machine_config &config);
void init_aladmdb();
void init_srmdb();
void init_barek2ch();
void init_barek3();
void init_barek3a();
void init_sonic2mb();
void init_twinktmb();
void init_jparkmb();
protected:
uint16_t dsw_r(offs_t offset);
@ -34,15 +32,10 @@ protected:
private:
void aladmdb_w(uint16_t data);
uint16_t aladmdb_r();
uint16_t barek3mba_r();
uint16_t jparkmb_r();
uint16_t twinktmb_r();
optional_ioport m_io_exp;
// bootleg specific
int m_aladmdb_mcu_port = 0;
};
// for games with emulated PIC microcontroller