summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/megadriv_acbl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/megadriv_acbl.cpp')
-rw-r--r--src/mame/drivers/megadriv_acbl.cpp1131
1 files changed, 0 insertions, 1131 deletions
diff --git a/src/mame/drivers/megadriv_acbl.cpp b/src/mame/drivers/megadriv_acbl.cpp
deleted file mode 100644
index 3fa037f74ca..00000000000
--- a/src/mame/drivers/megadriv_acbl.cpp
+++ /dev/null
@@ -1,1131 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:David Haywood,Stephane Humbert
-/***************************************************************************
-
- Sega Mega Drive/Genesis-based bootlegs
-
- Games supported:
- * Aladdin
- * Bare Knuckle III
- * Jurassic Park
- * Mortal Kombat 3
- * Sonic The Hedgehog 2
- * Super Street Fighter II - The New Challengers
- * Sunset Riders
- * Top Shooter
- * Twinkle Tale
-
-
-Aladdin PCB info
-================
-
-CPU
-Main CPU 68000P10
-Work RAM 64kB (62256 x2)
-Sound CPU Z80B
-Sound RAM 8kB (76c88-6264 x1)
-Sound IC YM2612 (identified by pins,code was been erased.Named on board as TA07)
-
-Other ICs
-Microchip PIC16C57 (probably it contains the MD modified bios)
-Osc 50 MHz
-There are present 3 flat-pack chips with code erased again and named TA04,TA05,TA06 on board,which i have
-identified (generically) by looking the PCB as:
-TA04-Intercommunication and sync generator chip
-TA05-Input controller
-TA06-VDP (probably MD clone) Uses 2x D41264 SIL package as video RAM
-
-ROMs
-
-M3,M4 main program
-M1,M2 graphics
-All EPROMs are 27C040
-
-Notes:
-
-Dip-switch 8 x1
-
-------------------------
-
-This ROMset comes from a bootleg PCB.The game is a coin-op conversion of the one developed for the Megadrive
-console.I cannot know gameplay differences since PCB is faulty.
-
-However,hardware is totally different.It seems to be based on Sega Mega Drive hardware with CPU clock increased,
-and since exists an "unlicensed" porting of the game for this system probably the "producers" are the same.
-
-
-Stephh's notes (based on the game M68000 code and some tests) :
-
-1) Useful addresses
-
- - 0xffff88.b = number of credits (range 0x00-0xff but display limited to 9)
- - 0xff7e3c.b = lives (range 0x30-0x39)
- - 0xffeffa.b = energy (range 0x00-0x08)
- - 0xffefe0.w = apples (range 0x30-0x39 * 2 , MSB first)
- - 0xffefe2.w = jewels (range 0x30-0x39 * 2 , MSB first)
- - 0xff7e29.b to 0xff7e2e.b = score (range 0x30-0x39 * 6) - MSDigit first
- - 0xff7e12.b to 0xff7e15.b = ??? (range 0x30-0x33 * 3 + 0x00) - MSDigit first - see below
- - 0xff7e16.b to 0xff7e19.b = ??? (range 0x30-0x33 * 3 + 0x00) - MSDigit first - see below
- - 0xff7e21.b = difficulty (range 0x00-0x02) - see below
-
-2) Addresses notes
-
- - I can't tell what addresses 0xff7r12.l and 0xff7e16.l are supposed to be designed for :
- they are written once at the beginning of each level (code at 0x1a9030) but I haven't found
- when they were read back (I've only played the 2 first levels though as well as the bonus level,
- but I also watched all demo levels till the end after the games full credits).
- I guess they were originally designed for bonus lives (additional and first), but no evidence.
- - 0xff7e21.b affects contents of 0xff7e3c.b, 0xffefe0.w, 0xff7e12.l and 0xff7e16.l :
-
- Easy Normal Hard
- 0xff7e21.b=0x00 0xff7e21.b=0x01 0xff7e21.b=0x02
- 0xff7e3c.b 0x32 0x31 0x30
- 0xffefe0.w 0x3035 0x3032 0x3030
- 0xff7e12.l 0x30313000 0x30313200 0x30313400
- 0xff7e16.l 0x30303900 0x30313200 0x30313500
-
-3) MCU notes
-
- - 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)
- - Difficulty Dip Switches are correct (see code at 0x1b2680)
- - Coinage Dip Switches might be wrong because I don't know what the possible values can be,
- but setting them the way I did isn't that bad (see code at 0x1b2a50)
- - It's possible that writes to 0x220000 are in fact a mask for what is read back from 0x330000,
- but I haven't found any formula (thus the "lame" read/write handlers you may investigate)
-
-4) Controls notes
-
- - This game is a one player only game (same as the MegaDrive version);
- that's why I've "blanked" player 2 inputs which are never read.
- - I've labelled the buttons the same way as in 'g_aladj' with default options.
-
-5) MegaDrive comparison ('g_aladj' in HazeMD)
-
- - There is no "OPTIONS" menu as the difficulty is handled via the MCU / Dip Switches.
- Some code has been patched but most is still there (see the texts in the ROM ares);
- Unfortunately, there seems to be no way to access them (no "service" button).
- - Even with the same settings (same value for 0xff7e21.b), lives and apples,
- as well as contents of 0xff7e12.l and 0xff7e16.l are really different) !
- Here is the same data as above for 'g_aladj' :
-
- Easy Normal Hard
- 0xff7e21.b=0x00 0xff7e21.b=0x01 0xff7e21.b=0x02
- 0xff7e3c.b 0x35 0x33 0x32
- 0xffefe0.w 0x3135 0x3130 0x3035
- 0xff7e12.l 0x30303600 0x30303800 0x30313000
- 0xff7e16.l 0x30303300 0x30303600 0x30303900
-
- But what makes the arcade version much harder is how energy is handled : in 'g_aladj', you can
- be hit 8 times before you lose a life, while in 'aladmdb', you lose a life as soon as you are hit !
- This is done via code change at 0x1aee3c and patched code at 0x1afc00 :
-
- diff aladmdb.asm g_aladj.asm
-
- < 1AEE3C: 4EB9 001A FC00 jsr $1afc00.l
- > 1AEE3C: 5339 00FF EFFA subq.b #1, $ffeffa.l
-
- < 1AFC00: 0C39 0001 00FF F57C cmpi.b #$1, $fff57c.l
- < 1AFC08: 6700 000A beq $1afc14
- < 1AFC0C: 4239 00FF EFFA clr.b $ffeffa.l
- < 1AFC12: 4E75 rts
- < 1AFC14: 5339 00FF EFFA subq.b #1, $ffeffa.l
- < 1AFC1A: 4E75 rts
-
- Surprisingly, when you are in "demo mode", player can be again be hit 8 times
- before losing a life (this is the purpose of the 0xfff57c "flag") !
-
-****************************************************************************
-
-Sunset Riders info
-====================
-
- - title raster effect is broken (bug in megadrive code, happens with normal set too)
-
-****************************************************************************
-
-Top Shooter PCB info
-====================
-
- Sun Mixing board, looks like a hacked up Genesis clone.
-
- Original driver by David Haywood
- Inputs by Mariusz Wojcieszek
-
- Top Shooter - (c)1995 - older board, look more like an actual hacked cart system, has an MCU
-
- Not Dumped
-
- Super Bubble Bobble (a bubble bobble rip-off from Sun Mixing, looks like it may be on this hardware)
-
-TOP SHOOTER - Sun Mixing Co. Ltd. 1995
-
-To me it seems like an original cartridge-based arcade board
-hacked to use an external ROM board and a standard JAMMA
-connector, but of course, I can be wrong.
-
-
- UPPER BOARD
-
- _________________________________________________________
- | ___________ ___________ _____ __ |
- | 74LS245P |U14 Empty | |U12 ROM1 | |IC1| |B| |
- | 74LS245P |__________| |__________| |___| |
- | 74LS245P ___________ ___________ _____________ |
- __| |U13 Empty | |U11 ROM2 | | AT89C51 | |
- |_ J |__________| |__________| |____________| |_
- |_ A ______________________ _____ |_ J
- |_ M | U10 MC68000P10 | |OSC| |_ P
- |_ M | Motorola | |_ 2
- |_ A |______________________| 74HC00P |_
- |_ 74LS245P ______________________ ________ |
- |_ | U9 Empty | |HM6116L |
- |_ | | |_______| |_ J
- |_ |______________________| |_ P
- |_ 74LS245P TD62oo3AP 74LS373P |_ 3
- |_ __________ |
- |_ 74LS245P |GALv20V8B| |
- |_ ______ |
- |_ _____ |DIPS| |_ P
- | |U24 | |_ 1
- | 74LS245P |
- | TD62oo3AP |
- | |
- |_ 97 ____________ _____|
- |_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|_|_|_|
-
-
- IC1 = Surface scratched out, don't know what it is
- U24 = Surface scratched out, seems like a PROM
- DIPs = Fixed as: 00001000
- ROMs = Toshiba TC574000AD
-
- JP2, JP3 and P1 connects both boards, also another
- on-board connector is used, see notes for the 68K socket
- for the lower board.
-
-
- LOWER BOARD
-
- _________________________________________________________
- | ____ ____ |
- | ___ | I| | I| |
- | |I| | C| | C| |
- | |C| | 3| | 2| |
- | |1| |__| |__| |
- | |3| |__
- | _ _________________________ __|
- | |_| ||||||||||||||||||||||||| __|
- | IC14 ---------- SLOT --------- __|
- | ______________________ __|
- | | | __|
- | ___ | 68K (to upper board) | _______ __|
- | |I| |______________________| |SE-94| __|
- | |C| |JDDB | _|
- | |1| _______ |_____| |
- | |2| |SE-93| IC4 |
- | |JDDA | |
- | |_____| ___________ |_
- | IC8 |Z8400A PS| |
- | |_________| |
- | ______ _________ _________ |
- | | OSC| | IC11 | | IC7 | |
- | _____________ |_______| |_______| |
- | RST | | CN5 CN6 |
- |___________| |______________________________|
-
-
- IC3 = IC2 = Winbond W24257V
- IC7 = 6264LD 9440
- IC11 = SE-95 JDDC
- IC12 = Sony CXA1634P
- IC13 = Sony CXA1145P
- IC14 = GL358 N16
-
- RST is a reset button.
-
- OSC = 53.693175 MHz
-
- CN5 and CN6 are 9-pin connectors... serial ports?
-
- There are two wires soldered directly to two connectors
- of the slot, going to the upper board (via P1).
-
- The whole upper board is plugged using the 68000 socket,
- there is no 68K on the lower board.
-
- There is an edge connector, but it isn't JAMMA.
-
- "HK-986 (KINYO)" is written on the PCB, near the slot.
-
-****************************************************************************/
-
-#include "emu.h"
-#include "includes/megadriv.h"
-#include "includes/megadriv_acbl.h"
-
-
-/************************************ Megadrive Bootlegs *************************************/
-
-// smaller ROM region because some bootlegs check for RAM there (used by topshoot and hshavoc)
-void md_boot_state::md_bootleg_map(address_map &map)
-{
- map(0x000000, 0x1fffff).rom(); /* Cartridge Program Rom */
- map(0x200000, 0x2023ff).ram(); // tested
-
- map(0xa00000, 0xa01fff).rw(FUNC(md_boot_state::megadriv_68k_read_z80_ram), FUNC(md_boot_state::megadriv_68k_write_z80_ram));
- map(0xa02000, 0xa03fff).w(FUNC(md_boot_state::megadriv_68k_write_z80_ram));
- map(0xa04000, 0xa04003).rw(FUNC(md_boot_state::megadriv_68k_YM2612_read), FUNC(md_boot_state::megadriv_68k_YM2612_write));
- map(0xa06000, 0xa06001).w(FUNC(md_boot_state::megadriv_68k_z80_bank_write));
-
- map(0xa10000, 0xa1001f).rw(FUNC(md_boot_state::megadriv_68k_io_read), FUNC(md_boot_state::megadriv_68k_io_write));
- map(0xa11100, 0xa11101).rw(FUNC(md_boot_state::megadriv_68k_check_z80_bus), FUNC(md_boot_state::megadriv_68k_req_z80_bus));
- map(0xa11200, 0xa11201).w(FUNC(md_boot_state::megadriv_68k_req_z80_reset));
-
- map(0xc00000, 0xc0001f).rw(m_vdp, FUNC(sega315_5313_device::vdp_r), FUNC(sega315_5313_device::vdp_w));
- map(0xd00000, 0xd0001f).rw(m_vdp, FUNC(sega315_5313_device::vdp_r), FUNC(sega315_5313_device::vdp_w));
-
- map(0xe00000, 0xe0ffff).ram().mirror(0x1f0000).share("megadrive_ram");
-}
-
-void md_boot_state::md_bootleg(machine_config &config)
-{
- md_ntsc(config);
-
- m_maincpu->set_addrmap(AS_PROGRAM, &md_boot_state::md_bootleg_map);
-}
-
-/*************************************
- *
- * Games memory handlers
- *
- *************************************/
-
-WRITE16_MEMBER(md_boot_state::aladmdb_w )
-{
- /*
- Values returned from the log file :
- - aladmdb_w : 1b2a6c - data = 6600 (each time a coin is inserted)
- - aladmdb_w : 1b2a82 - data = 0000 (each time a coin is inserted)
- - aladmdb_w : 1b2d18 - data = aa00 (only once on reset)
- - aladmdb_w : 1b2d42 - data = 0000 (only once on reset)
- */
- logerror("aladmdb_w : %06x - data = %04x\n",m_maincpu->pc(),data);
-}
-
-READ16_MEMBER(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;
-}
-
-READ16_MEMBER(md_boot_state::twinktmb_r )
-{
- if (m_maincpu->pc()==0x02f81e)
- return ioport("COIN")->read(); // TODO: coins don't respond well
-
- if (m_maincpu->pc()==0x02f84e) return 0x0000; // what's this? dips?
-
- //logerror("twinktmb_r : %06x\n",m_maincpu->pc());
-
- return 0x0000;
-}
-
-READ16_MEMBER(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;
-}
-
-READ16_MEMBER(md_boot_state::mk3mdb_dsw_r )
-{
- static const char *const dswname[3] = { "DSWA", "DSWB", "DSWC" };
- return ioport(dswname[offset])->read();
-}
-
-READ16_MEMBER(md_boot_state::ssf2mdb_dsw_r )
-{
- static const char *const dswname[3] = { "DSWA", "DSWB", "DSWC" };
- return ioport(dswname[offset])->read();
-}
-
-READ16_MEMBER(md_boot_state::srmdb_dsw_r )
-{
- static const char *const dswname[3] = { "DSWA", "DSWB", "DSWC" };
- return ioport(dswname[offset])->read();
-}
-
-READ16_MEMBER(md_boot_state::topshoot_200051_r )
-{
- return -0x5b;
-}
-
-// jzth protection
-WRITE16_MEMBER(md_boot_state::bl_710000_w)
-{
- int pc = m_maincpu->pc();
-
- logerror("%06x writing to bl_710000_w %04x %04x\n", pc, data, mem_mask);
-
- // protection value is read from 0x710000 after a series of writes.. and stored at ff0007
- // startup
- /*
- 059ce0 writing to bl_710000_w ff08 ffff
- 059d04 writing to bl_710000_w 000a ffff
- 059d04 writing to bl_710000_w 000b ffff
- 059d04 writing to bl_710000_w 000c ffff
- 059d04 writing to bl_710000_w 000f ffff
- 059d1c writing to bl_710000_w ff09 ffff
- 059d2a reading from bl_710000_r (wants 0xe)
- 059ce0 writing to bl_710000_w ff08 ffff
- 059d04 writing to bl_710000_w 000a ffff
- 059d04 writing to bl_710000_w 000b ffff
- 059d04 writing to bl_710000_w 000c ffff
- 059d04 writing to bl_710000_w 000f ffff
- 059d1c writing to bl_710000_w ff09 ffff
- 059d2a reading from bl_710000_r (wants 0xe)
- */
- // before lv stage 3
- /*
- 059ce0 writing to bl_710000_w 0008 ffff
- 059d04 writing to bl_710000_w 000b ffff
- 059d04 writing to bl_710000_w 000f ffff
- 059d1c writing to bl_710000_w ff09 ffff
- 059d2a reading from bl_710000_r (wants 0x4)
- */
- // start level 3
- /*
- 059ce0 writing to bl_710000_w ff08 ffff
- 059d04 writing to bl_710000_w 000b ffff
- 059d04 writing to bl_710000_w 000c ffff
- 059d04 writing to bl_710000_w 000e ffff
- 059d1c writing to bl_710000_w ff09 ffff
- 059d2a reading from bl_710000_r (wants 0x5)
-
- // after end sequence
- 059ce0 writing to bl_710000_w 0008 ffff
- 059d04 writing to bl_710000_w 000a ffff
- 059d04 writing to bl_710000_w 000b ffff
- 059d04 writing to bl_710000_w 000c ffff
- 059d04 writing to bl_710000_w 000f ffff
- 059d1c writing to bl_710000_w ff09 ffff
- 059d2a reading from bl_710000_r (wants 0xe)
-
- */
- m_protcount++;
-}
-
-
-READ16_MEMBER(md_boot_state::bl_710000_r)
-{
- uint16_t ret;
- int pc = m_maincpu->pc();
- logerror("%06x reading from bl_710000_r\n", pc);
-
- if (m_protcount==6) { ret = 0xe; }
- else if (m_protcount==5) { ret = 0x5; }
- else if (m_protcount==4) { ret = 0x4; }
- else ret = 0xf;
-
- m_protcount = 0;
- return ret;
-}
-
-
-/*************************************
- *
- * Game-specific port definitions
- *
- *************************************/
-
-/* verified from M68000 code */
-INPUT_PORTS_START( ssf2mdb )
- PORT_INCLUDE( md_common )
-
- PORT_MODIFY("PAD1")
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
-
- PORT_MODIFY("PAD2")
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 )
-
- PORT_START("EXTRA1") /* Extra buttons for Joypad 1 (6 button + start + mode) NOT READ DIRECTLY */
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1)
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1)
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("EXTRA2") /* Extra buttons for Joypad 2 (6 button + start + mode) NOT READ DIRECTLY */
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2)
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2)
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("IN0") /* 3rd I/O port */
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
-
- PORT_START("DSWA")
- PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) )
-// PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
-
- PORT_START("DSWB")
- PORT_DIPNAME( 0x07, 0x03, DEF_STR( Difficulty ) )
- PORT_DIPSETTING( 0x07, "0 (Easiest)" )
- PORT_DIPSETTING( 0x06, "1" )
- PORT_DIPSETTING( 0x05, "2" )
- PORT_DIPSETTING( 0x04, "3" )
- PORT_DIPSETTING( 0x03, "4" )
- PORT_DIPSETTING( 0x02, "5" )
- PORT_DIPSETTING( 0x01, "6" )
- PORT_DIPSETTING( 0x00, "7 (Hardest)" )
-
- PORT_START("DSWC")
- PORT_DIPNAME( 0x0f, 0x0b, "Speed" )
- PORT_DIPSETTING( 0x0f, "0 (Slowest)" )
- PORT_DIPSETTING( 0x0e, "1" )
- PORT_DIPSETTING( 0x0d, "2" )
- PORT_DIPSETTING( 0x0c, "3" )
- PORT_DIPSETTING( 0x0b, "4" )
- PORT_DIPSETTING( 0x0a, "5" )
- PORT_DIPSETTING( 0x09, "6" )
- PORT_DIPSETTING( 0x08, "7" )
- PORT_DIPSETTING( 0x07, "8" )
- PORT_DIPSETTING( 0x06, "9" )
- PORT_DIPSETTING( 0x05, "10 (Fastest)" )
-// PORT_DIPSETTING( 0x04, "10 (Fastest)" )
-// PORT_DIPSETTING( 0x03, "10 (Fastest)" )
-// PORT_DIPSETTING( 0x02, "10 (Fastest)" )
-// PORT_DIPSETTING( 0x01, "10 (Fastest)" )
-// PORT_DIPSETTING( 0x00, "10 (Fastest)" )
-INPUT_PORTS_END
-
-/* verified from M68000 code */
-INPUT_PORTS_START( mk3mdb )
- PORT_INCLUDE( md_common )
-
- PORT_MODIFY("PAD1")
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
-
- PORT_MODIFY("PAD2")
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 )
-
- PORT_START("EXTRA1") /* Extra buttons for Joypad 1 (6 button + start + mode) NOT READ DIRECTLY */
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1)
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1)
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("EXTRA2") /* Extra buttons for Joypad 2 (6 button + start + mode) NOT READ DIRECTLY */
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2)
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2)
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("IN0")
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
-
- PORT_START("DSWA")
- PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) )
-// PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
-
- PORT_START("DSWB")
- PORT_DIPNAME( 0x07, 0x07, DEF_STR( Difficulty ) )
- PORT_DIPSETTING( 0x07, DEF_STR( Easiest ) )
- PORT_DIPSETTING( 0x06, DEF_STR( Easy ) )
- PORT_DIPSETTING( 0x05, DEF_STR( Medium ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Hard ) )
- PORT_DIPSETTING( 0x03, DEF_STR( Hardest ) )
-// PORT_DIPSETTING( 0x02, DEF_STR( Hardest ) )
-// PORT_DIPSETTING( 0x01, DEF_STR( Hardest ) )
-// PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
- PORT_DIPUNUSED( 0x08, IP_ACTIVE_HIGH )
- PORT_DIPUNUSED( 0x10, IP_ACTIVE_HIGH )
- PORT_DIPUNUSED( 0x20, IP_ACTIVE_HIGH )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x40, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "Blood" )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x80, DEF_STR( On ) )
-
- 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("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_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 */
-INPUT_PORTS_END
-
-INPUT_PORTS_START( sonic2mb )
- PORT_INCLUDE( md_common )
-
- PORT_MODIFY("PAD1")
- 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( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
-
- PORT_MODIFY("PAD2")
- PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("DSW")
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
- PORT_BIT( 0x00fc, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_DIPNAME( 0x0300, 0x0200, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2")
- PORT_DIPSETTING( 0x0000, "1" )
- PORT_DIPSETTING( 0x0100, "2" )
- PORT_DIPSETTING( 0x0200, "3" )
- PORT_DIPSETTING( 0x0300, "4" )
- PORT_DIPNAME( 0x3c00, 0x2000, "Timer Speed" ) PORT_DIPLOCATION("SW1:3,4,5,6")
- PORT_DIPSETTING( 0x3c00, "0 (Slowest)" )
- PORT_DIPSETTING( 0x3800, "1" )
- PORT_DIPSETTING( 0x3400, "2" )
- PORT_DIPSETTING( 0x3000, "3" )
- PORT_DIPSETTING( 0x2c00, "4" )
- PORT_DIPSETTING( 0x2800, "5" )
- PORT_DIPSETTING( 0x2400, "6" )
- PORT_DIPSETTING( 0x2000, "7" )
- PORT_DIPSETTING( 0x1c00, "8" )
- PORT_DIPSETTING( 0x1800, "9" )
- PORT_DIPSETTING( 0x1400, "10" )
- PORT_DIPSETTING( 0x1000, "11" )
- PORT_DIPSETTING( 0x0c00, "12" )
- PORT_DIPSETTING( 0x0800, "13" )
- PORT_DIPSETTING( 0x0400, "14" )
- PORT_DIPSETTING( 0x0000, "15 (Fastest)" )
- PORT_DIPUNKNOWN_DIPLOC(0x4000, 0x4000, "SW1:7")
- PORT_DIPUNKNOWN_DIPLOC(0x8000, 0x8000, "SW1:8")
-INPUT_PORTS_END
-
-INPUT_PORTS_START( twinktmb )
- PORT_INCLUDE( aladmdb )
-
- /* As I don't know how it is on real hardware, this is more a guess than anything */
-
- PORT_MODIFY("MCU")
- PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW1:1")
- PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW1:2")
- PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW1:3")
- PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW1:4")
- PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW1:5")
- PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW1:6")
- PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW1:7")
- PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW1:8")
-
- PORT_START("COIN")
- PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_COIN1 )
- PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_COIN2 )
- PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNUSED )
-INPUT_PORTS_END
-
-/* verified from M68000 code */
-INPUT_PORTS_START( srmdb )
- PORT_INCLUDE( md_common )
-
- PORT_MODIFY("PAD1")
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Shoot") // a
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Jump") // b
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED ) // c (duplicate shoot button)
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) // start
-
- PORT_MODIFY("PAD2")
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Shoot") // a
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Jump") // b
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED ) // c (duplicate shoot button)
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 )
-
- PORT_START("IN0") /* 3rd I/O port */
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
-
- PORT_START("DSWA")
- PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x07, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x06, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x05, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) )
-
- PORT_START("DSWB")
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )
- PORT_DIPSETTING( 0x03, DEF_STR( Easy ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Medium ) )
- PORT_DIPSETTING( 0x01, DEF_STR( Hard ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
-
- PORT_START("DSWC")
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )
- PORT_DIPSETTING( 0x03, "3" )
- PORT_DIPSETTING( 0x02, "4" )
- PORT_DIPSETTING( 0x01, "5" )
- PORT_DIPSETTING( 0x00, "6" )
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( topshoot ) /* Top Shooter Input Ports */
-
- PORT_START("IN0")
- PORT_BIT( 0x4f, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Bet") PORT_IMPULSE(1)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Start") PORT_IMPULSE(1)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Fire") PORT_IMPULSE(1)
-
- PORT_START("IN1")
- PORT_BIT( 0xe7, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Test mode down") PORT_IMPULSE(1)
-
- PORT_START("IN2")
- PORT_BIT( 0xfd, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1)
-
- PORT_START("IN3")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(1)
- PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNKNOWN )
-INPUT_PORTS_END
-
-INPUT_PORTS_START( barek3 )
- PORT_INCLUDE( md_common )
-
- PORT_START("COINS")
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_COIN2 )
-
- PORT_START("DSW")
- PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 1C_5C ) )
- PORT_DIPNAME( 0x18, 0x18, DEF_STR( Lives ) )
- PORT_DIPSETTING( 0x18, "1" )
- PORT_DIPSETTING( 0x10, "2" )
- PORT_DIPSETTING( 0x08, "3" )
- PORT_DIPSETTING( 0x00, "4" )
- PORT_DIPNAME( 0xe0, 0xe0, DEF_STR( Difficulty ) )
- PORT_DIPSETTING( 0x60, DEF_STR( Very_Easy ) )
- PORT_DIPSETTING( 0x40, DEF_STR( Easy ) )
- PORT_DIPSETTING( 0xe0, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Hard ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Very_Hard ) )
-INPUT_PORTS_END
-
-/*************************************
- *
- * Machine Configuration
- *
- *************************************/
-
-void md_boot_state::megadrvb(machine_config &config)
-{
- md_ntsc(config);
- MCFG_MACHINE_START_OVERRIDE(md_boot_state, md_bootleg)
-}
-
-MACHINE_START_MEMBER(md_boot_state, md_6button)
-{
- MACHINE_START_CALL_MEMBER(md_bootleg);
-
- m_io_pad_6b[0] = ioport("EXTRA1");
- m_io_pad_6b[1] = ioport("EXTRA2");
- m_io_pad_6b[2] = ioport("IN0");
- m_io_pad_6b[3] = ioport("UNK");
-
- // setup timers for 6 button pads
- for (int i = 0; i < 3; i++)
- m_io_timeout[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(md_base_state::io_timeout_timer_callback),this), (void*)(uintptr_t)i);
-}
-
-void md_boot_state::megadrvb_6b(machine_config &config)
-{
- md_ntsc(config);
- MCFG_MACHINE_START_OVERRIDE(md_boot_state, md_6button)
-}
-
-
-/*************************************
- *
- * ROM definition(s)
- *
- *************************************/
-
-ROM_START( aladmdb )
- ROM_REGION( 0x400000, "maincpu", 0 ) /* 68000 Code */
- ROM_LOAD16_BYTE( "m1.bin", 0x000001, 0x080000, CRC(5e2671e4) SHA1(54705c7614fc7b5a1065478fa41f51dd1d8045b7) )
- 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))
-
- ROM_REGION( 0x2000, "pic", ROMREGION_ERASE00 )
- ROM_LOAD( "pic16c57xtp", 0x0000, 0x2000, NO_DUMP )
-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
- // this is bootlegged from "Mortal Kombat 3 (4) [!].bin"
- ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 ) /* 68000 Code */
- ROM_LOAD16_BYTE( "1.u1", 0x080001, 0x020000, CRC(0dc01b23) SHA1(f1aa7ac88c8e3deb5a0a065862722e9d27b87b4c) )
- ROM_CONTINUE( 0x000001, 0x020000)
- ROM_CONTINUE( 0x0c0001, 0x020000)
- ROM_CONTINUE( 0x040001, 0x020000)
- ROM_LOAD16_BYTE( "2.u3", 0x180001, 0x040000, CRC(50250235) SHA1(9f9e06f26163b92c76397fde43b38b3536bcb637) )
- ROM_CONTINUE( 0x100001, 0x040000)
- ROM_LOAD16_BYTE( "3.u9", 0x280001, 0x040000, CRC(493404c1) SHA1(73f4bd1eeeee3f175f4378ab406a97f94f88880b) )
- ROM_CONTINUE( 0x200001, 0x040000)
- ROM_LOAD16_BYTE( "4.u11",0x380001, 0x040000, CRC(a52156b8) SHA1(0990ef1fb3427a5d3c262e264feb25c1db75ed33) )
- ROM_CONTINUE( 0x300001, 0x040000)
- ROM_LOAD16_BYTE( "6.u2", 0x080000, 0x020000, CRC(9852fd6f) SHA1(348befeca5129c5ea2c142760ec93511f98f23cc) )
- ROM_CONTINUE( 0x000000, 0x020000)
- ROM_CONTINUE( 0x0c0000, 0x020000)
- ROM_CONTINUE( 0x040000, 0x020000)
- ROM_LOAD16_BYTE( "5.u4", 0x180000, 0x040000, CRC(ed6a6d13) SHA1(eaab912ee035ece03f7cfceb1b546004399daad5) )
- ROM_CONTINUE( 0x100000, 0x040000)
- ROM_LOAD16_BYTE( "7.u10",0x280000, 0x040000, CRC(a124d8d1) SHA1(d391b130992701d0fae7e827ba314b8368d809de) )
- ROM_CONTINUE( 0x200000, 0x040000)
- ROM_LOAD16_BYTE( "8.u12",0x380000, 0x040000, CRC(8176f7cc) SHA1(375e1e982b97ba709fb160b04f56f6aa2d580104) )
- ROM_CONTINUE( 0x300000, 0x040000)
-ROM_END
-
-ROM_START( ssf2mdb )
- ROM_REGION( 0x1400000, "maincpu", 0 ) /* 68000 Code */
- /* Special Case, custom PCB, linear ROM mapping of 5meg */
- ROM_LOAD16_BYTE( "rom_a", 0x000000, 0x200000, CRC(59726521) SHA1(3120bac17f56c01ffb9d3f9e31efa0263e3774af) )
- ROM_LOAD16_BYTE( "rom_b", 0x000001, 0x200000, CRC(7dad5540) SHA1(9279068b2218d239fdd557dd959ac70e74853178) )
- ROM_LOAD16_BYTE( "rom_c", 0x400000, 0x080000, CRC(deb48624) SHA1(39ffa7de7b808e0b95cb039bb381705d77420933) )
- ROM_LOAD16_BYTE( "rom_d", 0x400001, 0x080000, CRC(b99f6a5b) SHA1(adbe28a7522024bc66328ac86fecf9ded3310e8e) )
-ROM_END
-
-ROM_START( srmdb )
- ROM_REGION( 0x400000, "maincpu", 0 ) /* 68000 Code */
- ROM_LOAD16_BYTE( "u1", 0x000001, 0x020000, CRC(c59f33bd) SHA1(bd5bce7698a70ea005b79ab34bcdb056872ef980) )
- ROM_LOAD16_BYTE( "u2", 0x000000, 0x020000, CRC(9125c054) SHA1(c73bdeb6b11c59d2b5f5968959b02697957ca894) )
- ROM_LOAD16_BYTE( "u3", 0x040001, 0x020000, CRC(0fee0fbe) SHA1(001e0fda12707512aad537e533acf28e726e6107) )
- ROM_LOAD16_BYTE( "u4", 0x040000, 0x020000, CRC(fc2aed41) SHA1(27eb3957f5ed26ee5276523b1df46fa7eb298e1f))
-ROM_END
-
-ROM_START( topshoot ) /* Top Shooter (c)1995 Sun Mixing */
- ROM_REGION( 0x200000, "maincpu", 0 )
- ROM_LOAD16_BYTE( "tc574000ad_u11_2.bin", 0x000000, 0x080000, CRC(b235c4d9) SHA1(fbb308a5f6e769f3277824cb6a3b50c308969ac2) )
- ROM_LOAD16_BYTE( "tc574000ad_u12_1.bin", 0x000001, 0x080000, CRC(e826f6ad) SHA1(23ec8bb608f954d3b915f061e7076c0c63b8259e) )
-
- // not hooked up yet
- ROM_REGION( 0x1000, "mcu", 0 )
- ROM_LOAD( "89c51.bin", 0x0000, 0x1000, CRC(595475c8) SHA1(8313819ba06cc92b54f88c1ca9f34be8d1ec94d0) )
-ROM_END
-
-ROM_START( sonic2mb )
- ROM_REGION( 0x400000, "maincpu", 0 ) /* 68000 Code */
- ROM_LOAD16_BYTE( "m1", 0x000001, 0x080000, CRC(7b40aa24) SHA1(247882cd1f412366d61aeb4d85bbeefd5f108e1d) )
- ROM_LOAD16_BYTE( "m2", 0x000000, 0x080000, CRC(84b3f758) SHA1(19846b9d951db6f78f3e155d33f1b6349fb87f1a) )
-ROM_END
-
-ROM_START( barek3mb )
- ROM_REGION( 0x400000, "maincpu", 0 ) /* 68000 Code */
- ROM_LOAD16_BYTE( "6.u19", 0x000000, 0x080000, CRC(2de19519) SHA1(f5fcef1da8b5370e399f0451382e3c6e7754c9c8) )
- ROM_LOAD16_BYTE( "3.u18", 0x000001, 0x080000, CRC(db900e82) SHA1(172a4fe01a0ffd1ea3aed74f2c58234fd55b876d) )
- ROM_LOAD16_BYTE( "4.u15", 0x100000, 0x080000, CRC(6353b4b1) SHA1(9f89a2f02170496ca798b89e37e1f2bae0e9155d) )
- ROM_LOAD16_BYTE( "1.u14", 0x100001, 0x080000, CRC(24d31e12) SHA1(64c1b968e1ee5d0355d902e280f33e4466f27b07) )
- ROM_LOAD16_BYTE( "5.u17", 0x200000, 0x080000, CRC(0feb974f) SHA1(ed1a25b6f1669dc6061d519985b6373fa89176c7) )
- ROM_LOAD16_BYTE( "2.u16", 0x200001, 0x080000, CRC(bba4a585) SHA1(32c59729943d7b4c1a39f2a2b0dae9ce16991e9c) )
-ROM_END
-
-ROM_START( twinktmb ) // same PCB as sonic2mb, but in this one the PIC is populated
- ROM_REGION( 0x400000, "maincpu", 0 ) /* 68000 Code */
- ROM_LOAD16_BYTE( "m2.bin", 0x000000, 0x080000, CRC(44424f8f) SHA1(e16318bfdf869765c821c264cf9a7e6c728f7073) )
- ROM_LOAD16_BYTE( "m1.bin", 0x000001, 0x080000, CRC(69aa916e) SHA1(7ea6b571fd0b6494051d5846ee9b4564b7692766) )
-
- ROM_REGION( 0x2000, "pic", ROMREGION_ERASE00 )
- ROM_LOAD( "pic16c57xtp", 0x0000, 0x2000, NO_DUMP )
-ROM_END
-
-ROM_START( jparkmb ) // same PCB as twinktmb, JPA-028 label
- ROM_REGION( 0x400000, "maincpu", 0 ) /* 68000 Code */
- ROM_LOAD16_BYTE( "f24.bin", 0x000000, 0x080000, CRC(bdd851d2) SHA1(1a75922e848fd5c7cd4ab102c99effcfcf382097) )
- ROM_LOAD16_BYTE( "f23.bin", 0x000001, 0x080000, CRC(8dc66c71) SHA1(a2741ffa583a4b779b7be3e3ae628e97f792ee3d) )
- ROM_LOAD16_BYTE( "f22.bin", 0x100000, 0x080000, CRC(36337d06) SHA1(d537cff2c8ed58da146faf390c09252be359ccd1) )
- ROM_LOAD16_BYTE( "f21.bin", 0x100001, 0x080000, CRC(6ede6b6b) SHA1(cf29300d9278ea03f54cf54ea582bdd8b9bbdbbd) )
-
- ROM_REGION( 0x2000, "pic", ROMREGION_ERASE00 )
- ROM_LOAD( "pic16c57xtp", 0x0000, 0x2000, NO_DUMP )
-ROM_END
-
-/*************************************
- *
- * Game-specific driver inits
- *
- *************************************/
-
-#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, write16_delegate(*this, FUNC(md_boot_state::aladmdb_w)));
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x330000, 0x330001, read16_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_state::init_mk3mdb()
-{
- uint8_t *rom = memregion("maincpu")->base();
-
- for (int x = 0x000001; x < 0x100001; x += 2)
- {
- if (x & 0x80000)
- {
- rom[x] = rom[x] ^ 0xff;
- rom[x] = bitswap<8>(rom[x], 0,3,2,5,4,6,7,1);
- }
- else
- {
- rom[x] = rom[x] ^ 0xff;
- rom[x] = bitswap<8>(rom[x], 4,0,7,1,3,6,2,5);
- }
- }
-
- for (int x = 0x100001; x < 0x400000; x += 2)
- {
- if (x & 0x80000)
- {
- rom[x] = rom[x] ^ 0xff;
- rom[x] = bitswap<8>(rom[x], 2,7,5,4,1,0,3,6);
- }
- else
- {
- rom[x] = bitswap<8>(rom[x], 6,1,4,2,7,0,3,5);
- }
- }
-
- // boot vectors don't seem to be valid, so they are patched...
- rom[0x01] = 0x01;
- rom[0x00] = 0x00;
- rom[0x03] = 0x00;
- rom[0x02] = 0x00;
- rom[0x05] = 0x00;
- rom[0x04] = 0x00;
- rom[0x07] = 0x02;
- rom[0x06] = 0x10;
-
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16_delegate(*this, FUNC(md_boot_state::mk3mdb_dsw_r)));
-
- init_megadriv();
- // 6 button game, so overwrite 3 button io handlers
- m_megadrive_io_read_data_port_ptr = read8_delegate(*this, FUNC(md_base_state::megadrive_io_read_data_port_6button));
- m_megadrive_io_write_data_port_ptr = write16_delegate(*this, FUNC(md_base_state::megadrive_io_write_data_port_6button));
-}
-
-void md_boot_state::init_ssf2mdb()
-{
- m_maincpu->space(AS_PROGRAM).nop_write(0xA130F0, 0xA130FF); // custom banking is disabled (!)
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x400000, 0x5fffff, "bank5");
- m_maincpu->space(AS_PROGRAM).unmap_write(0x400000, 0x5fffff);
-
- membank("bank5")->set_base(memregion( "maincpu" )->base() + 0x400000 );
-
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16_delegate(*this, FUNC(md_boot_state::ssf2mdb_dsw_r)));
-
- init_megadrij();
- // 6 button game, so overwrite 3 button io handlers
- m_megadrive_io_read_data_port_ptr = read8_delegate(*this, FUNC(md_base_state::megadrive_io_read_data_port_6button));
- m_megadrive_io_write_data_port_ptr = write16_delegate(*this, FUNC(md_base_state::megadrive_io_write_data_port_6button));
-}
-
-void md_boot_state::init_srmdb()
-{
- uint8_t* rom = memregion("maincpu")->base();
-
- for (int x = 0x00001; x < 0x40000; x += 2)
- {
- rom[x] = bitswap<8>(rom[x] ^ 0xff, 5,1,6,2,4,3,7,0);
- }
-
- for (int x = 0x40001; x < 0x80000; x += 2)
- {
- rom[x] = bitswap<8>(rom[x] ^ 0x00, 2,6,1,5,0,7,3,4);
- }
-
- // boot vectors don't seem to be valid, so they are patched...
- rom[0x01] = 0x01;
- rom[0x00] = 0x00;
- rom[0x03] = 0x00;
- rom[0x02] = 0x00;
-
- rom[0x06] = 0xd2;
- rom[0x07] = 0x00;
-
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16_delegate(*this, FUNC(md_boot_state::srmdb_dsw_r)));
-
- init_megadriv();
-}
-
-void md_boot_state::init_topshoot()
-{
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x200050, 0x200051, read16_delegate(*this, FUNC(md_boot_state::topshoot_200051_r)));
- m_maincpu->space(AS_PROGRAM).install_read_port(0x200042, 0x200043, "IN0");
- m_maincpu->space(AS_PROGRAM).install_read_port(0x200044, 0x200045, "IN1");
- m_maincpu->space(AS_PROGRAM).install_read_port(0x200046, 0x200047, "IN2");
- m_maincpu->space(AS_PROGRAM).install_read_port(0x200048, 0x200049, "IN3");
-
- init_megadriv();
-}
-
-void md_boot_state::init_barek3()
-{
- uint8_t* rom = memregion("maincpu")->base();
-
- for (int x = 0x00001; x < 0x300000; x += 2)
- {
- rom[x] = bitswap<8>(rom[x], 6,2,4,0,7,1,3,5);
- }
-
- m_maincpu->space(AS_PROGRAM).install_read_port(0x380070, 0x380071, "COINS");
- m_maincpu->space(AS_PROGRAM).install_read_port(0x380078, 0x380079, "DSW");
-
- init_megadrij();
-}
-
-void md_boot_state::init_sonic2mb()
-{
- // 100000 = writes to unpopulated MCU?
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x100000, 0x100001, write16_delegate(*this, FUNC(md_boot_state::aladmdb_w)));
- m_maincpu->space(AS_PROGRAM).install_read_port(0x300000, 0x300001, "DSW");
-
- init_megadrij();
-}
-
-void md_boot_state::init_twinktmb()
-{
- // boot vectors don't seem to be valid, so they are patched...
- uint8_t* rom = memregion("maincpu")->base();
- rom[0x01] = 0x00;
-
- rom[0x04] = 0x00;
- rom[0x07] = 0x46;
- rom[0x06] = 0xcc;
-
- init_megadrij();
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x100000, 0x100001, write16_delegate(*this, FUNC(md_boot_state::aladmdb_w)));
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x300000, 0x300001, read16_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, write16_delegate(*this, FUNC(md_boot_state::aladmdb_w)));
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x300000, 0x300001, read16_delegate(*this, FUNC(md_boot_state::jparkmb_r)));
-}
-
-/*************************************
- *
- * Game driver(s)
- *
- *************************************/
-
-GAME( 1993, aladmdb, 0, megadrvb, aladmdb, md_boot_state, init_aladmdb, ROT0, "bootleg / Sega", "Aladdin (bootleg of Japanese Megadrive version)", 0)
-GAME( 1996, mk3mdb, 0, megadrvb_6b, mk3mdb, md_boot_state, init_mk3mdb, ROT0, "bootleg / Midway", "Mortal Kombat 3 (bootleg of Megadrive version)", 0)
-GAME( 1994, ssf2mdb, 0, megadrvb_6b, ssf2mdb, md_boot_state, init_ssf2mdb, ROT0, "bootleg / Capcom", "Super Street Fighter II - The New Challengers (bootleg of Japanese MegaDrive version)", 0)
-GAME( 1993, srmdb, 0, megadrvb, srmdb, md_boot_state, init_srmdb, ROT0, "bootleg / Konami", "Sunset Riders (bootleg of Megadrive version)", 0)
-GAME( 1995, topshoot, 0, md_bootleg, topshoot, md_boot_state, init_topshoot, ROT0, "Sun Mixing", "Top Shooter", 0)
-GAME( 1993, sonic2mb, 0, md_bootleg, sonic2mb, md_boot_state, init_sonic2mb, ROT0, "bootleg / Sega", "Sonic The Hedgehog 2 (bootleg of Megadrive version)", 0 ) // flying wires going through the empty PIC space aren't completely understood
-GAME( 1994, barek3mb, 0, megadrvb, barek3, md_boot_state, init_barek3, ROT0, "bootleg / Sega", "Bare Knuckle III (bootleg of Megadrive version)", 0 )
-GAME( 1993, twinktmb, 0, md_bootleg, twinktmb, md_boot_state, init_twinktmb, ROT0, "bootleg / Sega", "Twinkle Tale (bootleg of Megadrive 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 Megadrive version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // needs PIC decap or simulation