summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/mame/drivers/asuka.c
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/mame/drivers/asuka.c')
-rw-r--r--trunk/src/mame/drivers/asuka.c1556
1 files changed, 1556 insertions, 0 deletions
diff --git a/trunk/src/mame/drivers/asuka.c b/trunk/src/mame/drivers/asuka.c
new file mode 100644
index 00000000000..19ae9758173
--- /dev/null
+++ b/trunk/src/mame/drivers/asuka.c
@@ -0,0 +1,1556 @@
+/***************************************************************************
+
+Asuka & Asuka (+ Taito/Visco games on similar hardware)
+=============
+
+David Graves, Brian Troha
+
+Made out of: Rastan driver by Jarek Burczynski
+ MAME Taito F2 driver
+ Raine source - very special thanks to
+ Richard Bush and the Raine Team.
+ two different drivers for Bonze Adventure that were
+ written at the same time by Yochizo and Frotz
+
+ Bonze Adventure (c) 1988 Taito Corporation
+ Asuka & Asuka (c) 1988 Taito Corporation
+ Maze of Flott (c) 1989 Taito Corporation
+ Galmedes (c) 1992 Visco Corporation
+ Earth Joker (c) 1993 Visco Corporation
+ Kokontouzai Eto Monogatari (c) 1994 Visco Corporation
+
+Main CPU: MC68000 uses irq 5 (4 in bonze, 4&5 in cadash).
+Sound : Z80 & YM2151 + MSM5205 (YM2610 in bonze)
+Chips : TC0100SCN + TC0002OBJ + TC0110PCR (+ C-Chip in bonze)
+(Bryan McPhail: My Bonze uses TC0100SCN + PC0900J (OBJ) + TC0110PCR + TC0140SYT (SND))
+
+Memory map for Asuka & Asuka
+----------------------------
+
+The other games seem identical but Eto is slightly different.
+
+0x000000 - 0x0fffff : ROM (not all used for each game)
+0x100000 - 0x103fff : 16k of RAM
+0x200000 - 0x20000f : palette generator
+0x400000 - 0x40000f : input ports and dipswitches
+0x3a0000 - 0x3a0003 : sprite control
+0x3e0000 - 0x3e0003 : communication with sound CPU
+0xc00000 - 0xc2000f : TC0100SCN (see taitoic.c)
+0xd00000 - 0xd007ff : sprite RAM
+
+
+Cadashu Info (Malcor)
+---------------------
+
+Main PCB (JAMMA) K1100528A
+Main processor - 68000 12MHz
+ - HD64180RP8 8MHz (8 bit processor, dual channel DMAC,
+ memory mapped I/O, used for multigame link)
+Misc custom ICs including three PQFPs, one PGA, and one SIP
+
+
+From "garmedes.txt"
+-------------------
+
+The following cord is written, on PCB: K1100388A J1100169A M6100708A
+There are the parts that were written as B68 on this PCB.
+The original title of the game called B68 is unknown.
+This PCB is the same as the one that is used with EARTH-JOKER.
+<B68 is the verified Taito ROM id# for Asuka & Asuka - B.Troha>
+
+
+Use of TC0100SCN
+----------------
+
+Asuka & Asuka: $e6a init code clearing TC0100SCN areas is erroneous.
+It only clears 1/8 of the BG layers; then it clears too much of the
+rowscroll areas [0xc000, 0xc400] causing overrun into next 64K block.
+
+Asuka is one of the early Taito games using the TC0100SCN. (Ninja
+Warriors was probably the first.) They didn't bother using its FG (text)
+layer facility, instead placing text in the BG / sprite layers.
+
+Maze of Flott [(c) one year later] and most other games with the
+TC0100SCN do use the FG layer for text (Driftout is an exception).
+
+
+Stephh's notes (based on the game M68000 code and some tests) :
+
+1) 'bonzeadv', 'jigkmgri' and 'bonzeadvu'
+
+ - Region stored at 0x03fffe.w
+ - Sets :
+ * 'bonzeadv' : region = 0x0002
+ * 'jigkmgri' : region = 0x0000
+ * 'bonzeadvu': region = 0x0001
+ - These 3 games are 100% the same, only region differs !
+ - Coinage relies on the region (code at 0x02d344) :
+ * 0x0000 (Japan) and 0x0001 (US) use TAITO_COINAGE_JAPAN_OLD_LOC()
+ * 0x0002 (World) uses TAITO_COINAGE_WORLD_LOC()
+ - Notice screen only if region = 0x0000
+ - Texts and game name rely on the region :
+ * 0x0000 : most texts in Japanese - game name is "Jigoku Meguri"
+ * other : all texts in English - game name is "Bonze Adventure"
+ - Bonus lives aren't awarded correctly due to bogus code at 0x00961e :
+
+ 00961E: 302D 0B7E move.w ($b7e,A5), D0
+ 009622: 0240 0018 andi.w #$18, D0
+ 009626: E648 lsr.w #3, D0
+
+ Here is what the correct code should be :
+
+ 00961E: 302D 0B7E move.w ($b7e,A5), D0
+ 009622: 0240 0030 andi.w #$30, D0
+ 009626: E848 lsr.w #4, D0
+
+ - DSWB bit 7 was previously used to allow map viewing (C-Chip test ?),
+ but it is now unused due to "bra" instruction at 0x007572
+
+
+2) 'bonzeadvo'
+
+ - Region stored at 0x03fffe.w
+ - Sets :
+ * 'bonzeadvo' : region = 0x0002
+ - The only difference is that the following code is missing :
+
+ 00D218: 08AD 0004 15DE bclr #$4, ($15de,A5)
+
+ So the "crouch" bit wasn't always reset, which may cause you
+ to consume all your magic powers in less than 4 frames !
+ See bonzeadv0107u1ora full report on MAME Testers site
+ - Same other notes as for 'bonzeadv'
+
+
+3) 'asuka*'
+
+ - No region
+ - BOTH sets use TAITO_COINAGE_JAPAN_OLD_LOC() for coinage,
+ so I wonder if the World version isn't a US version
+ - Additional notice screen in 'asukaj'
+
+
+4) 'mofflott'
+
+ - Region stored at 0x03fffe.w
+ - Sets :
+ * 'mofflott' : region = 0x0001
+ - Coinage relies on the region (code at 0x0145ec) :
+ * 0x0001 (Japan) and 0x0002 (US ?) use TAITO_COINAGE_JAPAN_OLD_LOC()
+ * 0x0003 (World) uses TAITO_COINAGE_WORLD_LOC()
+ - Notice screen only if region = 0x0001
+
+
+5) 'cadash*'
+
+ - Region stored at 0x07fffe.w
+ - Sets :
+ * 'cadash' : region = 0x0003
+ * 'cadashj' : region = 0x0001
+ * 'cadashu' : region = 0x0002
+ * 'cadashfr' : region = 0x0003
+ * 'cadashit' : region = 0x0003
+ - These 5 games are 100% the same, only region differs !
+ However each version requires its specific texts
+ - Coinage relies on the region (code at 0x0013d6) :
+ * 0x0001 (Japan) uses TAITO_COINAGE_JAPAN_OLD_LOC()
+ * 0x0002 (US) uses TAITO_COINAGE_US_LOC()
+ * 0x0003 (World) uses TAITO_COINAGE_WORLD_LOC()
+ - Notice screen only if region = 0x0001 or region = 0x0002
+ - FBI logo only if region = 0x0002
+ - I can't tell about the Italian and Japanese versions,
+ but translation in the French version is really poor !
+
+
+6) 'galmedes'
+
+ - No region (not a Taito game anyway)
+ - Coinage relies on "Coin Mode" Dip Switch (code at 0x0801c0) :
+ * "Mode A" uses TAITO_COINAGE_JAPAN_OLD_LOC()
+ * "Mode B" uses TAITO_COINAGE_WORLD_LOC()
+ - Notice screen
+
+
+7) 'earthjkr'
+
+ - No region (not a Taito game anyway)
+ - Game uses TAITO_COINAGE_JAPAN_OLD_LOC()
+ - Notice screen only if "Copyright" Dip Switch set to "Visco"
+
+
+8) 'eto'
+
+ - No region (not a Taito game anyway)
+ - Game uses TAITO_COINAGE_JAPAN_OLD_LOC()
+ - No notice screen
+
+
+TODO
+----
+
+Mofflot: $14c46 sub inits sound system: in a pause loop during this
+it reads a dummy address.
+
+Earthjkr: Wrong screen size? Left edge of green blueprints in
+attract looks like it's incorrectly off screen.
+
+Cadash: Hooks for twin arcade machine setup: will involve emulating an extra
+microcontroller, the 07 rom might be the program for it. Cadash background
+colors don't reinitialize properly with save states.
+
+Galmedes: Test mode has select1/2 stuck at on.
+
+Eto: $76d0 might be a protection check? It reads to and writes from
+the prog rom. Doesn't seem to cause problems though.
+
+DIP locations verified for:
+ - bonzeadv (manual)
+ - cadash (manual)
+ - asuka (manual)
+ - mofflott (manual)
+ - galmedes (manual)
+
+***************************************************************************/
+
+#include "emu.h"
+#include "cpu/z80/z80.h"
+#include "cpu/z180/z180.h"
+#include "cpu/m68000/m68000.h"
+#include "includes/taitoipt.h"
+#include "video/taitoic.h"
+#include "machine/taitoio.h"
+#include "audio/taitosnd.h"
+#include "sound/2610intf.h"
+#include "sound/2151intf.h"
+#include "sound/msm5205.h"
+#include "includes/asuka.h"
+
+
+/***********************************************************
+ INTERRUPTS
+***********************************************************/
+
+static TIMER_CALLBACK( cadash_interrupt5 )
+{
+ asuka_state *state = machine.driver_data<asuka_state>();
+ device_set_input_line(state->m_maincpu, 5, HOLD_LINE);
+}
+
+static INTERRUPT_GEN( cadash_interrupt )
+{
+ device->machine().scheduler().timer_set(downcast<cpu_device *>(device)->cycles_to_attotime(500), FUNC(cadash_interrupt5));
+ device_set_input_line(device, 4, HOLD_LINE); /* interrupt vector 4 */
+}
+
+
+/************************************************
+ SOUND
+************************************************/
+
+static WRITE8_HANDLER( sound_bankswitch_w )
+{
+ memory_set_bank(space->machine(), "bank1", data & 0x03);
+}
+
+static WRITE8_DEVICE_HANDLER( sound_bankswitch_2151_w )
+{
+ memory_set_bank(device->machine(), "bank1", data & 0x03);
+}
+
+
+
+static void asuka_msm5205_vck( device_t *device )
+{
+ asuka_state *state = device->machine().driver_data<asuka_state>();
+
+ if (state->m_adpcm_data != -1)
+ {
+ msm5205_data_w(device, state->m_adpcm_data & 0x0f);
+ state->m_adpcm_data = -1;
+ }
+ else
+ {
+ state->m_adpcm_data = device->machine().region("ymsnd")->base()[state->m_adpcm_pos];
+ state->m_adpcm_pos = (state->m_adpcm_pos + 1) & 0xffff;
+ msm5205_data_w(device, state->m_adpcm_data >> 4);
+ }
+}
+
+static WRITE8_HANDLER( asuka_msm5205_address_w )
+{
+ asuka_state *state = space->machine().driver_data<asuka_state>();
+ state->m_adpcm_pos = (state->m_adpcm_pos & 0x00ff) | (data << 8);
+}
+
+static WRITE8_DEVICE_HANDLER( asuka_msm5205_start_w )
+{
+ msm5205_reset_w(device, 0);
+}
+
+static WRITE8_DEVICE_HANDLER( asuka_msm5205_stop_w )
+{
+ asuka_state *state = device->machine().driver_data<asuka_state>();
+ msm5205_reset_w(device, 1);
+ state->m_adpcm_pos &= 0xff00;
+}
+
+static UINT8 *cadash_shared_ram;
+
+static READ16_HANDLER( cadash_share_r )
+{
+ return cadash_shared_ram[offset];
+}
+
+static WRITE16_HANDLER( cadash_share_w )
+{
+ cadash_shared_ram[offset] = data & 0xff;
+}
+
+
+/***********************************************************
+ MEMORY STRUCTURES
+***********************************************************/
+
+static ADDRESS_MAP_START( bonzeadv_map, AS_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x03ffff) AM_ROM
+ AM_RANGE(0x080000, 0x0fffff) AM_ROM
+ AM_RANGE(0x10c000, 0x10ffff) AM_RAM
+ AM_RANGE(0x200000, 0x200007) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_word_w)
+ AM_RANGE(0x390000, 0x390001) AM_READ_PORT("DSWA")
+ AM_RANGE(0x3a0000, 0x3a0001) AM_WRITE(asuka_spritectrl_w)
+ AM_RANGE(0x3b0000, 0x3b0001) AM_READ_PORT("DSWB")
+ AM_RANGE(0x3c0000, 0x3c0001) AM_WRITE(watchdog_reset16_w)
+ AM_RANGE(0x3d0000, 0x3d0001) AM_READNOP
+ AM_RANGE(0x3e0000, 0x3e0001) AM_DEVWRITE8("tc0140syt", tc0140syt_port_w, 0x00ff)
+ AM_RANGE(0x3e0002, 0x3e0003) AM_DEVREADWRITE8("tc0140syt", tc0140syt_comm_r, tc0140syt_comm_w, 0x00ff)
+ AM_RANGE(0x800000, 0x8007ff) AM_READWRITE(bonzeadv_cchip_ram_r, bonzeadv_cchip_ram_w)
+ AM_RANGE(0x800802, 0x800803) AM_READWRITE(bonzeadv_cchip_ctrl_r, bonzeadv_cchip_ctrl_w)
+ AM_RANGE(0x800c00, 0x800c01) AM_WRITE(bonzeadv_cchip_bank_w)
+ AM_RANGE(0xc00000, 0xc0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
+ AM_RANGE(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
+ AM_RANGE(0xd00000, 0xd03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( asuka_map, AS_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0fffff) AM_ROM
+ AM_RANGE(0x100000, 0x103fff) AM_RAM
+ AM_RANGE(0x1076f0, 0x1076f1) AM_READNOP /* Mofflott init does dummy reads here */
+ AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_word_w)
+ AM_RANGE(0x3a0000, 0x3a0003) AM_WRITE(asuka_spritectrl_w)
+ AM_RANGE(0x3e0000, 0x3e0001) AM_READNOP AM_DEVWRITE8("tc0140syt", tc0140syt_port_w, 0x00ff)
+ AM_RANGE(0x3e0002, 0x3e0003) AM_DEVREADWRITE8("tc0140syt", tc0140syt_comm_r, tc0140syt_comm_w, 0x00ff)
+ AM_RANGE(0x400000, 0x40000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff)
+ AM_RANGE(0xc00000, 0xc0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
+ AM_RANGE(0xc10000, 0xc103ff) AM_WRITENOP /* error in Asuka init code */
+ AM_RANGE(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
+ AM_RANGE(0xd00000, 0xd03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( cadash_map, AS_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x07ffff) AM_ROM
+ AM_RANGE(0x080000, 0x080003) AM_WRITE(asuka_spritectrl_w)
+ AM_RANGE(0x0c0000, 0x0c0001) AM_READNOP AM_DEVWRITE8("tc0140syt", tc0140syt_port_w, 0x00ff)
+ AM_RANGE(0x0c0002, 0x0c0003) AM_DEVREADWRITE8("tc0140syt", tc0140syt_comm_r, tc0140syt_comm_w, 0x00ff)
+ AM_RANGE(0x100000, 0x107fff) AM_RAM
+ AM_RANGE(0x800000, 0x800fff) AM_READWRITE(cadash_share_r,cadash_share_w) /* network ram */
+ AM_RANGE(0x900000, 0x90000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff)
+ AM_RANGE(0xa00000, 0xa0000f) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_4bpg_word_w)
+ AM_RANGE(0xb00000, 0xb03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */
+ AM_RANGE(0xc00000, 0xc0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
+ AM_RANGE(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( eto_map, AS_PROGRAM, 16 ) /* N.B. tc100scn mirror overlaps spriteram */
+ AM_RANGE(0x000000, 0x0fffff) AM_ROM
+ AM_RANGE(0x100000, 0x10000f) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_word_w)
+ AM_RANGE(0x200000, 0x203fff) AM_RAM
+ AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff)
+ AM_RANGE(0x400000, 0x40000f) AM_DEVREAD8("tc0220ioc", tc0220ioc_r, 0x00ff) /* service mode mirror */
+ AM_RANGE(0x4a0000, 0x4a0003) AM_WRITE(asuka_spritectrl_w)
+ AM_RANGE(0x4e0000, 0x4e0001) AM_READNOP AM_DEVWRITE8("tc0140syt", tc0140syt_port_w, 0x00ff)
+ AM_RANGE(0x4e0002, 0x4e0003) AM_DEVREADWRITE8("tc0140syt", tc0140syt_comm_r, tc0140syt_comm_w, 0x00ff)
+ AM_RANGE(0xc00000, 0xc03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */
+ AM_RANGE(0xc00000, 0xc0ffff) AM_DEVWRITE("tc0100scn", tc0100scn_word_w)
+ AM_RANGE(0xd00000, 0xd0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
+ AM_RANGE(0xd20000, 0xd2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
+ADDRESS_MAP_END
+
+
+/***************************************************************************/
+
+static ADDRESS_MAP_START( bonzeadv_z80_map, AS_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x3fff) AM_ROM
+ AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
+ AM_RANGE(0xc000, 0xdfff) AM_RAM
+ AM_RANGE(0xe000, 0xe003) AM_DEVREADWRITE("ymsnd", ym2610_r, ym2610_w)
+ AM_RANGE(0xe200, 0xe200) AM_DEVWRITE("tc0140syt", tc0140syt_slave_port_w)
+ AM_RANGE(0xe201, 0xe201) AM_DEVREADWRITE("tc0140syt", tc0140syt_slave_comm_r, tc0140syt_slave_comm_w)
+ AM_RANGE(0xe400, 0xe403) AM_WRITENOP /* pan */
+ AM_RANGE(0xe600, 0xe600) AM_WRITENOP
+ AM_RANGE(0xee00, 0xee00) AM_WRITENOP
+ AM_RANGE(0xf000, 0xf000) AM_WRITENOP
+ AM_RANGE(0xf200, 0xf200) AM_WRITE(sound_bankswitch_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( z80_map, AS_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x3fff) AM_ROM
+ AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
+ AM_RANGE(0x8000, 0x8fff) AM_RAM
+ AM_RANGE(0x9000, 0x9001) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w)
+// AM_RANGE(0x9002, 0x9100) AM_READNOP
+ AM_RANGE(0xa000, 0xa000) AM_DEVWRITE("tc0140syt", tc0140syt_slave_port_w)
+ AM_RANGE(0xa001, 0xa001) AM_DEVREADWRITE("tc0140syt", tc0140syt_slave_comm_r, tc0140syt_slave_comm_w)
+ AM_RANGE(0xb000, 0xb000) AM_WRITE(asuka_msm5205_address_w)
+ AM_RANGE(0xc000, 0xc000) AM_DEVWRITE("msm", asuka_msm5205_start_w)
+ AM_RANGE(0xd000, 0xd000) AM_DEVWRITE("msm", asuka_msm5205_stop_w)
+ADDRESS_MAP_END
+
+/* no MSM5205 */
+static ADDRESS_MAP_START( cadash_z80_map, AS_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x3fff) AM_ROM
+ AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
+ AM_RANGE(0x8000, 0x8fff) AM_RAM
+ AM_RANGE(0x9000, 0x9001) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w)
+ AM_RANGE(0xa000, 0xa000) AM_DEVWRITE("tc0140syt", tc0140syt_slave_port_w)
+ AM_RANGE(0xa001, 0xa001) AM_DEVREADWRITE("tc0140syt", tc0140syt_slave_comm_r, tc0140syt_slave_comm_w)
+ADDRESS_MAP_END
+
+/*
+Cadash communication CPU is a z180.
+[0x8000]: at pc=31, z180 checks a byte ... if it's equal to 0x4d ("M") then the board is in master mode, otherwise it's in slave mode.
+Right now, the z180 is too fast, so it never checks it properly ... maybe I'm missing a z180 halt line that's lying to somewhere on m68k side.
+[0x8002]: puts T in master mode, R in slave mode ... looks a rather obvious flag that says the current Tx / Rx state
+[0x8080-0x80ff]: slave data
+[0x8100-0x817f]: master data
+
+Internal I/O Asynchronous SCI regs are then checked ... we can't emulate this at the current time, needs two MAME instances.
+
+m68k M communicates with z180 M through shared ram, then the z180 M communicates with z180 S through these ASCI regs ... finally, the z180 S
+communicates with m68k S with its own shared ram. In short:
+
+m68k M -> z180 M <-> z180 S <- m68k S
+*/
+
+static ADDRESS_MAP_START( cadash_sub_map, AS_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM
+ AM_RANGE(0x8000, 0x87ff) AM_RAM AM_BASE(&cadash_shared_ram)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( cadash_sub_io, AS_IO, 8 )
+ AM_RANGE(0x00, 0x3f) AM_RAM // z180 internal I/O regs
+ADDRESS_MAP_END
+
+/***********************************************************
+ INPUT PORTS, DIPs
+***********************************************************/
+
+#define CADASH_PLAYERS_INPUT( player ) \
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) \
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) \
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(player) \
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(player) \
+ INPUT_GENERIC_JOY_HIGH_NIBBLE(player, IP_ACTIVE_LOW, PORT_8WAY, RIGHT, LEFT, DOWN, UP)
+
+
+/* different players and system inputs than 'asuka' */
+static INPUT_PORTS_START( bonzeadv )
+ /* 0x390000 -> 0x10cb7c ($b7c,A5) */
+ PORT_START("DSWA")
+ TAITO_MACHINE_COCKTAIL_LOC(SWA)
+ TAITO_COINAGE_WORLD_LOC(SWA)
+
+ /* 0x3b0000 -> 0x10cb7e ($b7e,A5) */
+ PORT_START("DSWB")
+ TAITO_DIFFICULTY_LOC(SWB)
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:3,4") /* see notes */
+ PORT_DIPSETTING( 0x08, "40k 100k" ) /* 300k 1000k 1500k 2000k 2500k 3000k 3500k 5000k */
+ PORT_DIPSETTING( 0x0c, "50k 150k" ) /* 500k 1000k 2000k 3000k 4000k 5000k 6000k 7000k */
+ PORT_DIPSETTING( 0x04, "60k 200k" ) /* 500k 1000k 2000k 3000k 4000k 5000k 6000k 7000k */
+ PORT_DIPSETTING( 0x00, "80k 250k" ) /* 500k 1000k 2000k 3000k 4000k 5000k 6000k 7000k */
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:5,6")
+ PORT_DIPSETTING( 0x20, "2" )
+ PORT_DIPSETTING( 0x30, "3" )
+ PORT_DIPSETTING( 0x10, "4" )
+ PORT_DIPSETTING( 0x00, "5" )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SWB:7")
+ PORT_DIPSETTING( 0x40, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+ PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SWB:8" ) /* see notes */
+
+ PORT_START("800007")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 )
+
+ PORT_START("800009")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(1)
+
+ PORT_START("80000B")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 )
+
+ PORT_START("80000D")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( jigkmgri )
+ PORT_INCLUDE(bonzeadv)
+
+ PORT_MODIFY("DSWA")
+ TAITO_COINAGE_JAPAN_OLD_LOC(SWA)
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( asuka )
+ /* 0x400000 -> 0x103618 */
+ PORT_START("DSWA")
+ TAITO_MACHINE_NO_COCKTAIL_LOC(SWA)
+ TAITO_COINAGE_JAPAN_OLD_LOC(SWA)
+
+ /* 0x400002 -> 0x10361c */
+ PORT_START("DSWB")
+ TAITO_DIFFICULTY_LOC(SWB)
+ PORT_DIPNAME( 0x0c, 0x0c, "Bonus Points" ) PORT_DIPLOCATION("SWB:3,4") /* for each plane shot after each end of level boss */
+ PORT_DIPSETTING( 0x0c, "500" )
+ PORT_DIPSETTING( 0x08, "1500" )
+ PORT_DIPSETTING( 0x04, "2000" )
+ PORT_DIPSETTING( 0x00, "2500" )
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:5,6")
+ PORT_DIPSETTING( 0x10, "1" )
+ PORT_DIPSETTING( 0x20, "2" )
+ PORT_DIPSETTING( 0x30, "3" )
+ PORT_DIPSETTING( 0x00, "4" )
+ PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SWB:7,8")
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPSETTING( 0xc0, "Up To Level 2" )
+ PORT_DIPSETTING( 0x80, "Up To Level 3" )
+ PORT_DIPSETTING( 0x40, DEF_STR( Yes ) )
+
+ PORT_START("IN0")
+ TAITO_JOY_UDLR_2_BUTTONS( 1 )
+
+ PORT_START("IN1")
+ TAITO_JOY_UDLR_2_BUTTONS( 2 )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( mofflott )
+ PORT_INCLUDE(asuka)
+
+ /* 0x400000 -> 0x100a92.b */
+ PORT_MODIFY("DSWA")
+ TAITO_MACHINE_COCKTAIL_LOC(SWA)
+
+ /* 0x400002 -> 0x100a93.b */
+ PORT_MODIFY("DSWB")
+ TAITO_DIFFICULTY_LOC(SWB)
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:3,4")
+ PORT_DIPSETTING( 0x0c, "20k And Every 50k" )
+ PORT_DIPSETTING( 0x08, "50k And Every 100k" )
+ PORT_DIPSETTING( 0x04, "100k Only" )
+ PORT_DIPSETTING( 0x00, DEF_STR( None ) )
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:5,6")
+ PORT_DIPSETTING( 0x00, "2" )
+ PORT_DIPSETTING( 0x30, "3" )
+ PORT_DIPSETTING( 0x10, "4" )
+ PORT_DIPSETTING( 0x20, "5" )
+ PORT_DIPNAME( 0x40, 0x40, "Invulnerability (Cheat)") PORT_DIPLOCATION("SWB:7")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, "Number Of Keys" ) PORT_DIPLOCATION("SWB:8")
+ PORT_DIPSETTING( 0x00, "B 14" ) /* Hard */
+ PORT_DIPSETTING( 0x80, "A 16" ) /* Easy */
+INPUT_PORTS_END
+
+/* different players and system inputs than 'asuka' */
+static INPUT_PORTS_START( cadash )
+ /* 0x900000 -> 0x10317a ($317a,A5) */
+ PORT_START("DSWA")
+ TAITO_MACHINE_NO_COCKTAIL_LOC(SWA)
+ TAITO_COINAGE_WORLD_LOC(SWA)
+
+ /* 0x900002 -> 0x10317c ($317c,A5) */
+ PORT_START("DSWB")
+ TAITO_DIFFICULTY_LOC(SWB)
+ PORT_DIPNAME( 0x0c, 0x0c, "Starting Time" ) PORT_DIPLOCATION("SWB:3,4")
+ PORT_DIPSETTING( 0x00, "5:00" )
+ PORT_DIPSETTING( 0x04, "6:00" )
+ PORT_DIPSETTING( 0x0c, "7:00" )
+ PORT_DIPSETTING( 0x08, "8:00" )
+ /* Round cleared Added time */
+ /* 1 8:00 */
+ /* 2 10:00 */
+ /* 3 8:00 */
+ /* 4 7:00 */
+ /* 5 9:00 */
+ PORT_DIPNAME( 0x30, 0x30, "Added Time (after round clear)" ) PORT_DIPLOCATION("SWB:5,6")
+ PORT_DIPSETTING( 0x00, "Default - 2:00" )
+ PORT_DIPSETTING( 0x10, "Default - 1:00" )
+ PORT_DIPSETTING( 0x30, "Default" )
+ PORT_DIPSETTING( 0x20, "Default + 1:00" )
+ PORT_DIPNAME( 0xc0, 0xc0, "Communication Mode" ) PORT_DIPLOCATION("SWB:7,8")
+ PORT_DIPSETTING( 0xc0, "Stand alone" )
+ PORT_DIPSETTING( 0x80, "Master" )
+ PORT_DIPSETTING( 0x00, "Slave" )
+// PORT_DIPSETTING( 0x40, "Stand alone" )
+
+ PORT_START("IN0")
+ CADASH_PLAYERS_INPUT( 1 )
+
+ PORT_START("IN1")
+ CADASH_PLAYERS_INPUT( 2 )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( cadashj )
+ PORT_INCLUDE(cadash)
+
+ PORT_MODIFY("DSWA")
+ TAITO_COINAGE_JAPAN_OLD_LOC(SWA)
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( cadashu )
+ PORT_INCLUDE(cadash)
+
+ PORT_MODIFY("DSWA")
+ TAITO_COINAGE_US_LOC(SWA)
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( galmedes )
+ PORT_INCLUDE(asuka)
+
+ /* 0x400000 -> 0x100982 */
+ PORT_MODIFY("DSWA")
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWA:4")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SWA:5,6")
+ PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) PORT_CONDITION("DSWB",0x80,PORTCOND_EQUALS,0x00)
+ PORT_DIPSETTING( 0x10, DEF_STR( 3C_1C ) ) PORT_CONDITION("DSWB",0x80,PORTCOND_EQUALS,0x00)
+ PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSWB",0x80,PORTCOND_EQUALS,0x80)
+ PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSWB",0x80,PORTCOND_EQUALS,0x00)
+ PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSWB",0x80,PORTCOND_EQUALS,0x80)
+ PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSWB",0x80,PORTCOND_EQUALS,0x00)
+ PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) ) PORT_CONDITION("DSWB",0x80,PORTCOND_EQUALS,0x80)
+ PORT_DIPSETTING( 0x20, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSWB",0x80,PORTCOND_EQUALS,0x80)
+ PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SWA:7,8")
+ PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSWB",0x80,PORTCOND_EQUALS,0x80)
+ PORT_DIPSETTING( 0xc0, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSWB",0x80,PORTCOND_EQUALS,0x80)
+ PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) ) PORT_CONDITION("DSWB",0x80,PORTCOND_EQUALS,0x80)
+ PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSWB",0x80,PORTCOND_EQUALS,0x80)
+ PORT_DIPSETTING( 0xc0, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSWB",0x80,PORTCOND_EQUALS,0x00)
+ PORT_DIPSETTING( 0x80, DEF_STR( 1C_3C ) ) PORT_CONDITION("DSWB",0x80,PORTCOND_EQUALS,0x00)
+ PORT_DIPSETTING( 0x40, DEF_STR( 1C_4C ) ) PORT_CONDITION("DSWB",0x80,PORTCOND_EQUALS,0x00)
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) ) PORT_CONDITION("DSWB",0x80,PORTCOND_EQUALS,0x00)
+
+ /* 0x400002 -> 0x100984 */
+ PORT_MODIFY("DSWB")
+ TAITO_DIFFICULTY_LOC(SWB)
+ PORT_DIPNAME( 0x0c, 0x08, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:3,4")
+ PORT_DIPSETTING( 0x08, "Every 100k" )
+ PORT_DIPSETTING( 0x0c, "100k And Every 200k" )
+ PORT_DIPSETTING( 0x04, "150k And Every 200k" )
+ PORT_DIPSETTING( 0x00, "Every 200k" )
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:5,6")
+ PORT_DIPSETTING( 0x20, "1" )
+ PORT_DIPSETTING( 0x10, "2" )
+ PORT_DIPSETTING( 0x30, "3" )
+ PORT_DIPSETTING( 0x00, "4" )
+ PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SWB:7" ) /* Listed as "Unused" */
+ PORT_DIPNAME( 0x80, 0x80, "Coin Mode" ) PORT_DIPLOCATION("SWB:8")
+ PORT_DIPSETTING( 0x80, "Mode A (Japan)" ) /* Mode A is TAITO_COINAGE_JAPAN_OLD */
+ PORT_DIPSETTING( 0x00, "Mode B (World)" ) /* Mode B is TAITO_COINAGE_WORLD */
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( earthjkr )
+ PORT_INCLUDE(asuka)
+ /* DSWA: 0x400000 -> 0x100932 */
+
+ /* 0x400002 -> 0x1009842 */
+ PORT_MODIFY("DSWB")
+ PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:3,4")
+ PORT_DIPSETTING( 0x00, "100k and 300k" )
+ PORT_DIPSETTING( 0x08, "100k only" )
+ PORT_DIPSETTING( 0x04, "200k only" )
+ PORT_DIPSETTING( 0x0c, DEF_STR( None ) )
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:5,6")
+ PORT_DIPSETTING( 0x00, "1" )
+ PORT_DIPSETTING( 0x30, "2" )
+ PORT_DIPSETTING( 0x20, "3" )
+ PORT_DIPSETTING( 0x10, "4" )
+ PORT_DIPNAME( 0x40, 0x40, "Copyright" ) PORT_DIPLOCATION("SWB:7") /* code at 0x00b982 and 0x00dbce */
+ PORT_DIPSETTING( 0x40, "Visco" ) /* Japan notice screen ON */
+ PORT_DIPSETTING( 0x00, "Visco (distributed by Romstar)" ) /* Japan notice screen OFF */
+ PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SWB:8" )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( eto )
+ PORT_INCLUDE(asuka)
+ /* DSWA: 0x300000 -> 0x200914 */
+
+ /* 0x300002 -> 0x200916 */
+ PORT_MODIFY("DSWB")
+ PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SWB:3" )
+ PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SWB:4" )
+ PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SWB:5" )
+ PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SWB:6" ) /* value stored at 0x20090a but not read back */
+ PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SWB:7" )
+ PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SWB:8" )
+INPUT_PORTS_END
+
+
+/**************************************************************
+ GFX DECODING
+**************************************************************/
+
+static const gfx_layout charlayout =
+{
+ 8,8,
+ RGN_FRAC(1,1),
+ 4,
+ { 0, 1, 2, 3 },
+ { 2*4, 3*4, 0*4, 1*4, 6*4, 7*4, 4*4, 5*4 },
+ { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
+ 32*8
+};
+
+static const gfx_layout tilelayout =
+{
+ 16,16,
+ RGN_FRAC(1,1),
+ 4,
+ { 0, 1, 2, 3 },
+ { 2*4, 3*4, 0*4, 1*4, 6*4, 7*4, 4*4, 5*4,
+ 10*4, 11*4, 8*4, 9*4, 14*4, 15*4, 12*4, 13*4 },
+ { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
+ 8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 },
+ 128*8
+};
+
+static GFXDECODE_START( asuka )
+ GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 256 ) /* OBJ */
+ GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 256 ) /* SCR */
+GFXDECODE_END
+
+
+
+/**************************************************************
+ SOUND
+**************************************************************/
+
+static void irq_handler(device_t *device, int irq)
+{
+ cputag_set_input_line(device->machine(), "audiocpu", 0, irq ? ASSERT_LINE : CLEAR_LINE);
+}
+
+static const ym2610_interface ym2610_config =
+{
+ irq_handler
+};
+
+
+static const ym2151_interface ym2151_config =
+{
+ irq_handler,
+ sound_bankswitch_2151_w
+};
+
+static const msm5205_interface msm5205_config =
+{
+ asuka_msm5205_vck, /* VCK function */
+ MSM5205_S48_4B /* 8 kHz */
+};
+
+
+/***********************************************************
+ MACHINE DRIVERS
+***********************************************************/
+
+static const tc0100scn_interface asuka_tc0100scn_intf =
+{
+ "screen",
+ 1, 2, /* gfxnum, txnum */
+ 0, 0, /* x_offset, y_offset */
+ 0, 0, /* flip_xoff, flip_yoff */
+ 0, 0, /* flip_text_xoff, flip_text_yoff */
+ 0, 0
+};
+
+static const tc0100scn_interface cadash_tc0100scn_intf =
+{
+ "screen",
+ 1, 2, /* gfxnum, txnum */
+ 1, 0, /* x_offset, y_offset */
+ 0, 0, /* flip_xoff, flip_yoff */
+ 0, 0, /* flip_text_xoff, flip_text_yoff */
+ 0, 0
+};
+
+static const pc090oj_interface asuka_pc090oj_intf =
+{
+ 0, 0, 8, 0
+};
+
+static const pc090oj_interface cadash_pc090oj_intf =
+{
+ 0, 0, 8, 1
+};
+
+static const tc0110pcr_interface asuka_tc0110pcr_intf =
+{
+ 0
+};
+
+
+static MACHINE_START( asuka )
+{
+ asuka_state *state = machine.driver_data<asuka_state>();
+
+ state->m_maincpu = machine.device("maincpu");
+ state->m_audiocpu = machine.device("audiocpu");
+ state->m_pc090oj = machine.device("pc090oj");
+ state->m_tc0100scn = machine.device("tc0100scn");
+
+ /* configure the banks */
+ memory_configure_bank(machine, "bank1", 0, 1, machine.region("audiocpu")->base(), 0);
+ memory_configure_bank(machine, "bank1", 1, 3, machine.region("audiocpu")->base() + 0x10000, 0x04000);
+
+ state->save_item(NAME(state->m_adpcm_pos));
+ state->save_item(NAME(state->m_adpcm_data));
+
+ state->save_item(NAME(state->m_current_round));
+ state->save_item(NAME(state->m_current_bank));
+ state->save_item(NAME(state->m_video_ctrl));
+ state->save_item(NAME(state->m_video_mask));
+ state->save_item(NAME(state->m_cc_port));
+ state->save_item(NAME(state->m_restart_status));
+ state->save_item(NAME(state->m_cval));
+}
+
+static MACHINE_RESET( asuka )
+{
+ asuka_state *state = machine.driver_data<asuka_state>();
+
+ state->m_adpcm_pos = 0;
+ state->m_adpcm_data = -1;
+ state->m_current_round = 0;
+ state->m_current_bank = 0;
+ state->m_video_ctrl = 0;
+ state->m_video_mask = 0;
+ state->m_cc_port = 0;
+ state->m_restart_status = 0;
+
+ memset(state->m_cval, 0, 26);
+}
+
+static SCREEN_EOF( asuka )
+{
+ asuka_state *state = machine.driver_data<asuka_state>();
+ pc090oj_eof_callback(state->m_pc090oj);
+}
+
+static const tc0220ioc_interface asuka_io_intf =
+{
+ DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
+ DEVCB_INPUT_PORT("IN0"), DEVCB_INPUT_PORT("IN1"), DEVCB_INPUT_PORT("IN2") /* port read handlers */
+};
+
+
+static const tc0140syt_interface asuka_tc0140syt_intf =
+{
+ "maincpu", "audiocpu"
+};
+
+static MACHINE_CONFIG_START( bonzeadv, asuka_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, 8000000) /* checked on PCB */
+ MCFG_CPU_PROGRAM_MAP(bonzeadv_map)
+ MCFG_CPU_VBLANK_INT("screen", irq4_line_hold)
+
+ MCFG_CPU_ADD("audiocpu", Z80,4000000) /* sound CPU, also required for test mode */
+ MCFG_CPU_PROGRAM_MAP(bonzeadv_z80_map)
+
+ MCFG_MACHINE_START(asuka)
+ MCFG_MACHINE_RESET(asuka)
+
+ MCFG_QUANTUM_TIME(attotime::from_hz(600))
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(60)
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
+ MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MCFG_SCREEN_SIZE(40*8, 32*8)
+ MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 3*8, 31*8-1)
+ MCFG_SCREEN_UPDATE(bonzeadv)
+ MCFG_SCREEN_EOF(asuka)
+
+ MCFG_GFXDECODE(asuka)
+ MCFG_PALETTE_LENGTH(4096)
+
+ MCFG_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf)
+ MCFG_TC0100SCN_ADD("tc0100scn", asuka_tc0100scn_intf)
+ MCFG_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM2610, 8000000)
+ MCFG_SOUND_CONFIG(ym2610_config)
+ MCFG_SOUND_ROUTE(0, "mono", 0.25)
+ MCFG_SOUND_ROUTE(1, "mono", 1.0)
+ MCFG_SOUND_ROUTE(2, "mono", 1.0)
+
+ MCFG_TC0140SYT_ADD("tc0140syt", asuka_tc0140syt_intf)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( asuka, asuka_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz/2) /* verified on pcb */
+ MCFG_CPU_PROGRAM_MAP(asuka_map)
+ MCFG_CPU_VBLANK_INT("screen", irq5_line_hold)
+
+ MCFG_CPU_ADD("audiocpu", Z80, XTAL_16MHz/4) /* verified on pcb */
+ MCFG_CPU_PROGRAM_MAP(z80_map)
+
+ MCFG_MACHINE_START(asuka)
+ MCFG_MACHINE_RESET(asuka)
+
+ MCFG_QUANTUM_TIME(attotime::from_hz(600))
+
+ MCFG_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(60)
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
+ MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MCFG_SCREEN_SIZE(40*8, 32*8)
+ MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 32*8-1)
+ MCFG_SCREEN_UPDATE(asuka)
+ MCFG_SCREEN_EOF(asuka)
+
+ MCFG_GFXDECODE(asuka)
+ MCFG_PALETTE_LENGTH(4096)
+
+ MCFG_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf)
+ MCFG_TC0100SCN_ADD("tc0100scn", asuka_tc0100scn_intf)
+ MCFG_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM2151, XTAL_16MHz/4) /* verified on pcb */
+ MCFG_SOUND_CONFIG(ym2151_config)
+ MCFG_SOUND_ROUTE(0, "mono", 0.50)
+ MCFG_SOUND_ROUTE(1, "mono", 0.50)
+
+ MCFG_SOUND_ADD("msm", MSM5205, XTAL_384kHz) /* verified on pcb */
+ MCFG_SOUND_CONFIG(msm5205_config)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_TC0140SYT_ADD("tc0140syt", asuka_tc0140syt_intf)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( cadash, asuka_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, XTAL_32MHz/2) /* 68000p12 running at 16Mhz, verified on pcb */
+ MCFG_CPU_PROGRAM_MAP(cadash_map)
+ MCFG_CPU_VBLANK_INT("screen", cadash_interrupt)
+
+ MCFG_CPU_ADD("audiocpu", Z80, XTAL_8MHz/2) /* verified on pcb */
+ MCFG_CPU_PROGRAM_MAP(cadash_z80_map)
+
+ MCFG_CPU_ADD("subcpu", Z180, 4000000) /* 4 MHz ??? */
+ MCFG_CPU_PROGRAM_MAP(cadash_sub_map)
+ MCFG_CPU_IO_MAP(cadash_sub_io)
+
+ MCFG_MACHINE_START(asuka)
+ MCFG_MACHINE_RESET(asuka)
+
+ MCFG_QUANTUM_TIME(attotime::from_hz(600))
+
+ MCFG_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(60)
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
+ MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MCFG_SCREEN_SIZE(40*8, 32*8)
+ MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 32*8-1)
+ MCFG_SCREEN_UPDATE(bonzeadv)
+ MCFG_SCREEN_EOF(asuka)
+
+ MCFG_GFXDECODE(asuka)
+ MCFG_PALETTE_LENGTH(4096)
+
+ MCFG_PC090OJ_ADD("pc090oj", cadash_pc090oj_intf)
+ MCFG_TC0100SCN_ADD("tc0100scn", cadash_tc0100scn_intf)
+ MCFG_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM2151, XTAL_8MHz/2) /* verified on pcb */
+ MCFG_SOUND_CONFIG(ym2151_config)
+ MCFG_SOUND_ROUTE(0, "mono", 0.50)
+ MCFG_SOUND_ROUTE(1, "mono", 0.50)
+
+ MCFG_TC0140SYT_ADD("tc0140syt", asuka_tc0140syt_intf)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( mofflott, asuka_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, 8000000) /* 8 MHz ??? */
+ MCFG_CPU_PROGRAM_MAP(asuka_map)
+ MCFG_CPU_VBLANK_INT("screen", irq5_line_hold)
+
+ MCFG_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */
+ MCFG_CPU_PROGRAM_MAP(z80_map)
+
+ MCFG_MACHINE_START(asuka)
+ MCFG_MACHINE_RESET(asuka)
+
+ MCFG_QUANTUM_TIME(attotime::from_hz(600))
+
+ MCFG_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(60)
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
+ MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MCFG_SCREEN_SIZE(40*8, 32*8)
+ MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 32*8-1)
+ MCFG_SCREEN_UPDATE(asuka)
+ MCFG_SCREEN_EOF(asuka)
+
+ MCFG_GFXDECODE(asuka)
+ MCFG_PALETTE_LENGTH(4096) /* only Mofflott uses full palette space */
+
+ MCFG_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf)
+ MCFG_TC0100SCN_ADD("tc0100scn", cadash_tc0100scn_intf)
+ MCFG_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM2151, 4000000)
+ MCFG_SOUND_CONFIG(ym2151_config)
+ MCFG_SOUND_ROUTE(0, "mono", 0.50)
+ MCFG_SOUND_ROUTE(1, "mono", 0.50)
+
+ MCFG_SOUND_ADD("msm", MSM5205, 384000)
+ MCFG_SOUND_CONFIG(msm5205_config)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_TC0140SYT_ADD("tc0140syt", asuka_tc0140syt_intf)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( galmedes, asuka_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, 8000000) /* 8 MHz ??? */
+ MCFG_CPU_PROGRAM_MAP(asuka_map)
+ MCFG_CPU_VBLANK_INT("screen", irq5_line_hold)
+
+ MCFG_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */
+ MCFG_CPU_PROGRAM_MAP(cadash_z80_map)
+
+ MCFG_MACHINE_START(asuka)
+ MCFG_MACHINE_RESET(asuka)
+
+ MCFG_QUANTUM_TIME(attotime::from_hz(600))
+
+ MCFG_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(60)
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
+ MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MCFG_SCREEN_SIZE(40*8, 32*8)
+ MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 32*8-1)
+ MCFG_SCREEN_UPDATE(asuka)
+ MCFG_SCREEN_EOF(asuka)
+
+ MCFG_GFXDECODE(asuka)
+ MCFG_PALETTE_LENGTH(4096) /* only Mofflott uses full palette space */
+
+ MCFG_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf)
+ MCFG_TC0100SCN_ADD("tc0100scn", cadash_tc0100scn_intf)
+ MCFG_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM2151, 4000000)
+ MCFG_SOUND_CONFIG(ym2151_config)
+ MCFG_SOUND_ROUTE(0, "mono", 0.50)
+ MCFG_SOUND_ROUTE(1, "mono", 0.50)
+
+ MCFG_TC0140SYT_ADD("tc0140syt", asuka_tc0140syt_intf)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( eto, asuka_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, 8000000) /* 8 MHz ??? */
+ MCFG_CPU_PROGRAM_MAP(eto_map)
+ MCFG_CPU_VBLANK_INT("screen", irq5_line_hold)
+
+ MCFG_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */
+ MCFG_CPU_PROGRAM_MAP(cadash_z80_map)
+
+ MCFG_MACHINE_START(asuka)
+ MCFG_MACHINE_RESET(asuka)
+
+ MCFG_QUANTUM_TIME(attotime::from_hz(600))
+
+ MCFG_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(60)
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
+ MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MCFG_SCREEN_SIZE(40*8, 32*8)
+ MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 32*8-1)
+ MCFG_SCREEN_UPDATE(asuka)
+ MCFG_SCREEN_EOF(asuka)
+
+ MCFG_GFXDECODE(asuka)
+ MCFG_PALETTE_LENGTH(4096)
+
+ MCFG_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf)
+ MCFG_TC0100SCN_ADD("tc0100scn", cadash_tc0100scn_intf)
+ MCFG_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_SOUND_ADD("ymsnd", YM2151, 4000000)
+ MCFG_SOUND_CONFIG(ym2151_config)
+ MCFG_SOUND_ROUTE(0, "mono", 0.50)
+ MCFG_SOUND_ROUTE(1, "mono", 0.50)
+
+ MCFG_TC0140SYT_ADD("tc0140syt", asuka_tc0140syt_intf)
+MACHINE_CONFIG_END
+
+
+/***************************************************************************
+ DRIVERS
+***************************************************************************/
+
+ROM_START( bonzeadv )
+ ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "b41-09-1.17", 0x00000, 0x10000, CRC(af821fbc) SHA1(55bc13742033a31c92d6268d6b8344062ca78633) )
+ ROM_LOAD16_BYTE( "b41-11-1.26", 0x00001, 0x10000, CRC(823fff00) SHA1(b8b8cafbe860136c202d8d9f3ed5a54e2f4df363) )
+ ROM_LOAD16_BYTE( "b41-10.16", 0x20000, 0x10000, CRC(4ca94d77) SHA1(69a9f6bcb6d5e4132eed50860bdfe8d6b6d914cd) )
+ ROM_LOAD16_BYTE( "b41-15.25", 0x20001, 0x10000, CRC(aed7a0d0) SHA1(99ffc0b0e88b81231756610bf48df5365e12603b) )
+ /* 0x040000 - 0x7ffff is intentionally empty */
+ ROM_LOAD16_WORD_SWAP( "b41-01.15", 0x80000, 0x80000, CRC(5d072fa4) SHA1(6ffe1b8531381eb6dd3f1fec18c91294a6aca9f6) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD( "b41-03.1", 0x00000, 0x80000, CRC(736d35d0) SHA1(7d41a7d71e117714bbd2cdda2953589cda6e763a) ) /* SCR tiles (8 x 8) */
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD( "b41-02.7", 0x00000, 0x80000, CRC(29f205d9) SHA1(9e9f0c2755a9aa5acfe2601911bfa07d8d61164c) ) /* Sprites (16 x 16) */
+
+ ROM_REGION( 0x1c000, "audiocpu", 0 ) /* sound cpu */
+ ROM_LOAD( "b41-13.20", 0x00000, 0x04000, CRC(9e464254) SHA1(b6f6126b54c15320ecaa652d0eeabaa4cd94bd26) )
+ ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */
+
+ /* CPU3 - CCHIP aka TC0030CMD marked b41-05.43 */
+
+ ROM_REGION( 0x80000, "ymsnd", 0 ) /* ADPCM samples */
+ ROM_LOAD( "b41-04.48", 0x00000, 0x80000, CRC(c668638f) SHA1(07238a6cb4d93ffaf6351657163b5d80f0dbf688) )
+ROM_END
+
+ROM_START( bonzeadvo )
+ ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "b41-09.17", 0x00000, 0x10000, CRC(06818710) SHA1(b8045f4e15246231a5645d22bb965953f7fb47a3) )
+ ROM_LOAD16_BYTE( "b41-11.26", 0x00001, 0x10000, CRC(33c4c2f4) SHA1(3f1e76932d8f7e06e976b968a711177d25254bef) )
+ ROM_LOAD16_BYTE( "b41-10.16", 0x20000, 0x10000, CRC(4ca94d77) SHA1(69a9f6bcb6d5e4132eed50860bdfe8d6b6d914cd) )
+ ROM_LOAD16_BYTE( "b41-15.25", 0x20001, 0x10000, CRC(aed7a0d0) SHA1(99ffc0b0e88b81231756610bf48df5365e12603b) )
+ /* 0x040000 - 0x7ffff is intentionally empty */
+ ROM_LOAD16_WORD_SWAP( "b41-01.15", 0x80000, 0x80000, CRC(5d072fa4) SHA1(6ffe1b8531381eb6dd3f1fec18c91294a6aca9f6) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD( "b41-03.1", 0x00000, 0x80000, CRC(736d35d0) SHA1(7d41a7d71e117714bbd2cdda2953589cda6e763a) ) /* SCR tiles (8 x 8) */
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD( "b41-02.7", 0x00000, 0x80000, CRC(29f205d9) SHA1(9e9f0c2755a9aa5acfe2601911bfa07d8d61164c) ) /* Sprites (16 x 16) */
+
+ ROM_REGION( 0x1c000, "audiocpu", 0 ) /* sound cpu */
+ ROM_LOAD( "b41-13.20", 0x00000, 0x04000, CRC(9e464254) SHA1(b6f6126b54c15320ecaa652d0eeabaa4cd94bd26) )
+ ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */
+
+ /* CPU3 - CCHIP aka TC0030CMD marked b41-05.43 */
+
+ ROM_REGION( 0x80000, "ymsnd", 0 ) /* ADPCM samples */
+ ROM_LOAD( "b41-04.48", 0x00000, 0x80000, CRC(c668638f) SHA1(07238a6cb4d93ffaf6351657163b5d80f0dbf688) )
+ROM_END
+
+ROM_START( bonzeadvu )
+ ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "b41-09-1.17", 0x00000, 0x10000, CRC(af821fbc) SHA1(55bc13742033a31c92d6268d6b8344062ca78633) )
+ ROM_LOAD16_BYTE( "b41-11-1.26", 0x00001, 0x10000, CRC(823fff00) SHA1(b8b8cafbe860136c202d8d9f3ed5a54e2f4df363) )
+ ROM_LOAD16_BYTE( "b41-10.16", 0x20000, 0x10000, CRC(4ca94d77) SHA1(69a9f6bcb6d5e4132eed50860bdfe8d6b6d914cd) )
+ ROM_LOAD16_BYTE( "b41-14.25", 0x20001, 0x10000, CRC(37def16a) SHA1(b0a3b7206db55e29454672fffadf4e2a64eed873) )
+ /* 0x040000 - 0x7ffff is intentionally empty */
+ ROM_LOAD16_WORD_SWAP( "b41-01.15", 0x80000, 0x80000, CRC(5d072fa4) SHA1(6ffe1b8531381eb6dd3f1fec18c91294a6aca9f6) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD( "b41-03.1", 0x00000, 0x80000, CRC(736d35d0) SHA1(7d41a7d71e117714bbd2cdda2953589cda6e763a) ) /* SCR tiles (8 x 8) */
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD( "b41-02.7", 0x00000, 0x80000, CRC(29f205d9) SHA1(9e9f0c2755a9aa5acfe2601911bfa07d8d61164c) ) /* Sprites (16 x 16) */
+
+ ROM_REGION( 0x1c000, "audiocpu", 0 ) /* sound cpu */
+ ROM_LOAD( "b41-13.20", 0x00000, 0x04000, CRC(9e464254) SHA1(b6f6126b54c15320ecaa652d0eeabaa4cd94bd26) )
+ ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */
+
+ /* CPU3 - CCHIP aka TC0030CMD marked b41-05.43 */
+
+ ROM_REGION( 0x80000, "ymsnd", 0 ) /* ADPCM samples */
+ ROM_LOAD( "b41-04.48", 0x00000, 0x80000, CRC(c668638f) SHA1(07238a6cb4d93ffaf6351657163b5d80f0dbf688) )
+ROM_END
+
+ROM_START( jigkmgri )
+ ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "b41-09-1.17", 0x00000, 0x10000, CRC(af821fbc) SHA1(55bc13742033a31c92d6268d6b8344062ca78633) )
+ ROM_LOAD16_BYTE( "b41-11-1.26", 0x00001, 0x10000, CRC(823fff00) SHA1(b8b8cafbe860136c202d8d9f3ed5a54e2f4df363) )
+ ROM_LOAD16_BYTE( "b41-10.16", 0x20000, 0x10000, CRC(4ca94d77) SHA1(69a9f6bcb6d5e4132eed50860bdfe8d6b6d914cd) )
+ ROM_LOAD16_BYTE( "b41-12.25", 0x20001, 0x10000, CRC(40d9c1fc) SHA1(6f03d263e10559988aaa2be00d9bbf55f2fb864e) )
+ /* 0x040000 - 0x7ffff is intentionally empty */
+ ROM_LOAD16_WORD_SWAP( "b41-01.15", 0x80000, 0x80000, CRC(5d072fa4) SHA1(6ffe1b8531381eb6dd3f1fec18c91294a6aca9f6) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD( "b41-03.1", 0x00000, 0x80000, CRC(736d35d0) SHA1(7d41a7d71e117714bbd2cdda2953589cda6e763a) ) /* Tiles (8 x 8) */
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD( "b41-02.7", 0x00000, 0x80000, CRC(29f205d9) SHA1(9e9f0c2755a9aa5acfe2601911bfa07d8d61164c) ) /* Sprites (16 x 16) */
+
+ ROM_REGION( 0x1c000, "audiocpu", 0 ) /* sound cpu */
+ ROM_LOAD( "b41-13.20", 0x00000, 0x04000, CRC(9e464254) SHA1(b6f6126b54c15320ecaa652d0eeabaa4cd94bd26) )
+ ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */
+
+ /* CPU3 - CCHIP aka TC0030CMD marked b41-05.43 */
+
+ ROM_REGION( 0x80000, "ymsnd", 0 ) /* ADPCM samples */
+ ROM_LOAD( "b41-04.48", 0x00000, 0x80000, CRC(c668638f) SHA1(07238a6cb4d93ffaf6351657163b5d80f0dbf688) )
+ROM_END
+
+ROM_START( asuka )
+ ROM_REGION( 0x100000, "maincpu", 0 ) /* 1024k for 68000 code */
+ ROM_LOAD16_BYTE( "b68-13.bin", 0x00000, 0x20000, CRC(855efb3e) SHA1(644e02e207adeaec7839c824688d88ab8d046418) )
+ ROM_LOAD16_BYTE( "b68-12.bin", 0x00001, 0x20000, CRC(271eeee9) SHA1(c08e347be4aae929c0ab95ff7618edaa1a7d6da9) )
+ /* 0x040000 - 0x7ffff is intentionally empty */
+ ROM_LOAD16_WORD( "b68-03.bin", 0x80000, 0x80000, CRC(d3a59b10) SHA1(35a2ff18b64e73ac5e17484354c0cc58bc2cd7fc) ) /* Fix ROM */
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD( "b68-01.bin", 0x00000, 0x80000, CRC(89f32c94) SHA1(74fbb699e05e2336509cb5ac06ed94335ff870d5) ) /* SCR tiles (8 x 8) */
+
+ ROM_REGION( 0xa0000, "gfx2", 0 )
+ ROM_LOAD ( "b68-02.bin", 0x00000, 0x80000, CRC(f5018cd3) SHA1(860ce140ae369556d03d5d78987b87c0d6070df5) ) /* Sprites (16 x 16) */
+ ROM_LOAD16_BYTE( "b68-07.bin", 0x80000, 0x10000, CRC(c113acc8) SHA1(613c61a78df73dcb0b9c9018ae829e865baac772) )
+ ROM_LOAD16_BYTE( "b68-06.bin", 0x80001, 0x10000, CRC(f517e64d) SHA1(8be491bfe0f7eed58521de9d31da677acf635c23) )
+
+ ROM_REGION( 0x1c000, "audiocpu", 0 ) /* sound cpu */
+ ROM_LOAD( "b68-11.bin", 0x00000, 0x04000, CRC(c378b508) SHA1(1b145fe736b924f298e02532cf9f26cc18b42ca7) )
+ ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */
+
+ ROM_REGION( 0x10000, "ymsnd", 0 ) /* ADPCM samples */
+ ROM_LOAD( "b68-10.bin", 0x00000, 0x10000, CRC(387aaf40) SHA1(47c583564ef1d49ece15f97221b2e073e8fb0544) )
+ROM_END
+
+ROM_START( asukaj )
+ ROM_REGION( 0x100000, "maincpu", 0 ) /* 1024k for 68000 code */
+ ROM_LOAD16_BYTE( "b68-09.bin", 0x00000, 0x20000, CRC(1eaa1bbb) SHA1(01ca6a5f3c47dab49654b84601119714eb329cc5) )
+ ROM_LOAD16_BYTE( "b68-08.bin", 0x00001, 0x20000, CRC(8cc96e60) SHA1(dc94f3fd48c0407ec72e8330bc688e9e16d39213) )
+ /* 0x040000 - 0x7ffff is intentionally empty */
+ ROM_LOAD16_WORD( "b68-03.bin", 0x80000, 0x80000, CRC(d3a59b10) SHA1(35a2ff18b64e73ac5e17484354c0cc58bc2cd7fc) ) /* Fix ROM */
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD( "b68-01.bin", 0x00000, 0x80000, CRC(89f32c94) SHA1(74fbb699e05e2336509cb5ac06ed94335ff870d5) ) /* SCR tiles (8 x 8) */
+
+ ROM_REGION( 0xa0000, "gfx2", 0 )
+ ROM_LOAD ( "b68-02.bin", 0x00000, 0x80000, CRC(f5018cd3) SHA1(860ce140ae369556d03d5d78987b87c0d6070df5) ) /* Sprites (16 x 16) */
+ ROM_LOAD16_BYTE( "b68-07.bin", 0x80000, 0x10000, CRC(c113acc8) SHA1(613c61a78df73dcb0b9c9018ae829e865baac772) )
+ ROM_LOAD16_BYTE( "b68-06.bin", 0x80001, 0x10000, CRC(f517e64d) SHA1(8be491bfe0f7eed58521de9d31da677acf635c23) )
+
+ ROM_REGION( 0x1c000, "audiocpu", 0 ) /* sound cpu */
+ ROM_LOAD( "b68-11.bin", 0x00000, 0x04000, CRC(c378b508) SHA1(1b145fe736b924f298e02532cf9f26cc18b42ca7) )
+ ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */
+
+ ROM_REGION( 0x10000, "ymsnd", 0 ) /* ADPCM samples */
+ ROM_LOAD( "b68-10.bin", 0x00000, 0x10000, CRC(387aaf40) SHA1(47c583564ef1d49ece15f97221b2e073e8fb0544) )
+ROM_END
+
+ROM_START( mofflott )
+ ROM_REGION( 0x100000, "maincpu", 0 ) /* 1024k for 68000 code */
+ ROM_LOAD16_BYTE( "c17-09.bin", 0x00000, 0x20000, CRC(05ee110f) SHA1(8cedd911d3fdcca1e409260d12dd03a2fb35ef86) )
+ ROM_LOAD16_BYTE( "c17-08.bin", 0x00001, 0x20000, CRC(d0aacffd) SHA1(2c5ec4020aad2c1cd3a004dc70a12e0d77eb6aa7) )
+ /* 0x40000 - 0x7ffff is intentionally empty */
+ ROM_LOAD16_WORD( "c17-03.bin", 0x80000, 0x80000, CRC(27047fc3) SHA1(1f88a7a42a94bac0e164a69896ae168ab821fbb3) ) /* Fix ROM */
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD( "c17-01.bin", 0x00000, 0x80000, CRC(e9466d42) SHA1(93d533a9a992e3ff537e914577ede41729235826) ) /* SCR tiles (8 x 8) */
+
+ ROM_REGION( 0xa0000, "gfx2", 0 )
+ ROM_LOAD ( "c17-02.bin", 0x00000, 0x80000, CRC(8860a8db) SHA1(372adea8835a9524ece30ab71181ef9d05b120e9) ) /* Sprites (16 x 16) */
+ ROM_LOAD16_BYTE( "c17-05.bin", 0x80000, 0x10000, CRC(57ac4741) SHA1(3188ff0866324c68fba8e9745a0cb186784cb53d) )
+ ROM_LOAD16_BYTE( "c17-04.bin", 0x80001, 0x10000, CRC(f4250410) SHA1(1f5f6baca4aa695ce2ae5c65adcb460da872a239) )
+
+ ROM_REGION( 0x1c000, "audiocpu", 0 ) /* sound cpu */
+ ROM_LOAD( "c17-07.bin", 0x00000, 0x04000, CRC(cdb7bc2c) SHA1(5113055c954a39918436db75cc06b53c29c60728) )
+ ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */
+
+ ROM_REGION( 0x10000, "ymsnd", 0 ) /* ADPCM samples */
+ ROM_LOAD( "c17-06.bin", 0x00000, 0x10000, CRC(5c332125) SHA1(408f42df18b38347c8a4e177a9484162a66877e1) )
+ROM_END
+
+ROM_START( cadash )
+ ROM_REGION( 0x80000, "maincpu", 0 ) /* 512k for 68000 code */
+ ROM_LOAD16_BYTE( "c21-14", 0x00000, 0x20000, CRC(5daf13fb) SHA1(c2be42b2cdc90b6463ce87211cf711c951b17fab) )
+ ROM_LOAD16_BYTE( "c21-16", 0x00001, 0x20000, CRC(cbaa2e75) SHA1(c41ea71f2b0e72bf993dfcfd30f1994cae9f52a0) )
+ ROM_LOAD16_BYTE( "c21-13", 0x40000, 0x20000, CRC(6b9e0ee9) SHA1(06314b9c0be19314e6b6ecb5274a63eb36b642f5) )
+ ROM_LOAD16_BYTE( "c21-17", 0x40001, 0x20000, CRC(bf9a578a) SHA1(42bde46081db6be2f61eaf171438ecc9264d18be) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD( "c21-02.9", 0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD( "c21-01.1", 0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */
+
+ ROM_REGION( 0x1c000, "audiocpu", 0 ) /* sound cpu */
+ ROM_LOAD( "c21-08.38", 0x00000, 0x04000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) )
+ ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */
+
+ ROM_REGION( 0x08000, "subcpu", 0 ) /* 2 machine interface mcu rom ? */
+ ROM_LOAD( "c21-07.57", 0x00000, 0x08000, CRC(f02292bd) SHA1(0a5c06a048ad67f90e0d766b504582e9eef035f7) )
+
+ ROM_REGION( 0x0800, "plds", 0 )
+ ROM_LOAD( "pal16l8b-c21-09.ic34", 0x0000, 0x0104, CRC(4b296700) SHA1(79d6c8fb13e30795d9c1f49885ada658f9722b68) )
+ ROM_LOAD( "pal16l8b-c21-10.ic45", 0x0200, 0x0104, CRC(35642f00) SHA1(a04403536b0ef7e8e7251dfc47274a6c8772fd2d) )
+ ROM_LOAD( "pal16l8b-c21-11-1.ic46", 0x0400, 0x0104, CRC(f4791e24) SHA1(7e3bbffec7b8f9171e6e09706e5622fef3c99ca0) )
+ ROM_LOAD( "pal20l8b-c21-12.ic47", 0x0600, 0x0144, CRC(bbc2cc97) SHA1(d4a68f28e0d3f5a3b39ecc25640bc9197ad0260b) )
+ROM_END
+
+ROM_START( cadashj )
+ ROM_REGION( 0x80000, "maincpu", 0 ) /* 512k for 68000 code */
+ ROM_LOAD16_BYTE( "c21-04.11", 0x00000, 0x20000, CRC(cc22ebe5) SHA1(170787e7ab2055af593f3f2596cab44feb53b060) )
+ ROM_LOAD16_BYTE( "c21-06.15", 0x00001, 0x20000, CRC(26e03304) SHA1(c8b271e455dde312c8871dc8dd4d3f0f063fa894) )
+ ROM_LOAD16_BYTE( "c21-03.10", 0x40000, 0x20000, CRC(c54888ed) SHA1(8a58da25eb8986a1c6496290e82344840badef0a) )
+ ROM_LOAD16_BYTE( "c21-05.14", 0x40001, 0x20000, CRC(834018d2) SHA1(0b1a29316f90a98478b47d7fa3f05c68e5ddd9b3) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD( "c21-02.9", 0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD( "c21-01.1", 0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */
+
+ ROM_REGION( 0x1c000, "audiocpu", 0 ) /* sound cpu */
+ ROM_LOAD( "c21-08.38", 0x00000, 0x04000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) )
+ ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */
+
+ ROM_REGION( 0x08000, "subcpu", 0 ) /* 2 machine interface mcu rom ? */
+ ROM_LOAD( "c21-07.57", 0x00000, 0x08000, CRC(f02292bd) SHA1(0a5c06a048ad67f90e0d766b504582e9eef035f7) )
+ROM_END
+
+ROM_START( cadashu )
+ ROM_REGION( 0x80000, "maincpu", 0 ) /* 512k for 68000 code */
+ ROM_LOAD16_BYTE( "c21-14-2.11", 0x00000, 0x20000, CRC(f823d418) SHA1(5b4a0b42fb5a2e1ba1e25465762cdc24c41b33f8) )
+ ROM_LOAD16_BYTE( "c21-16-2.15", 0x00001, 0x20000, CRC(90165577) SHA1(b8e163cf60933aaaa53873fbc866d8d1750240ab) )
+ ROM_LOAD16_BYTE( "c21-13-2.10", 0x40000, 0x20000, CRC(92dcc3ae) SHA1(7d11c6d8b54468f0c56b4f58adc176e4d46a62eb) )
+ ROM_LOAD16_BYTE( "c21-15-2.14", 0x40001, 0x20000, CRC(f915d26a) SHA1(cdc7e6a35077ebff937350aee1eee332352e9383) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ // bad dump so used checksum from other sets //
+ ROM_LOAD( "c21-02.9", 0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ // bad dump so used checksum from other sets //
+ ROM_LOAD( "c21-01.1", 0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */
+
+ ROM_REGION( 0x1c000, "audiocpu", 0 ) /* sound cpu */
+ ROM_LOAD( "c21-08.38", 0x00000, 0x04000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) )
+ ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */
+
+ ROM_REGION( 0x08000, "subcpu", 0 ) /* 2 machine interface mcu rom ? */
+ ROM_LOAD( "c21-07.57", 0x00000, 0x08000, CRC(f02292bd) SHA1(0a5c06a048ad67f90e0d766b504582e9eef035f7) )
+ROM_END
+
+ROM_START( cadashi )
+ ROM_REGION( 0x80000, "maincpu", 0 ) /* 512k for 68000 code */
+ ROM_LOAD16_BYTE( "c21-14it", 0x00000, 0x20000, CRC(d1d9e613) SHA1(296c188daec962bdb4e78e20f1cc4c7d1f4dda09) )
+ ROM_LOAD16_BYTE( "c21-16it", 0x00001, 0x20000, CRC(142256ef) SHA1(9ffc64d7c900bfa0300de9e6d18c7458f4c76ed7) )
+ ROM_LOAD16_BYTE( "c21-13it", 0x40000, 0x20000, CRC(c9cf6e30) SHA1(872c871cd60e0aa7149660277f67f90748d82743) )
+ ROM_LOAD16_BYTE( "c21-17it", 0x40001, 0x20000, CRC(641fc9dd) SHA1(1497e39f6b250de39ef2785aaca7e68a803612fa) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD( "c21-02.9", 0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD( "c21-01.1", 0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */
+
+ ROM_REGION( 0x1c000, "audiocpu", 0 ) /* sound cpu */
+ ROM_LOAD( "c21-08.38", 0x00000, 0x04000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) )
+ ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */
+
+ ROM_REGION( 0x08000, "subcpu", 0 ) /* 2 machine interface mcu rom ? */
+ ROM_LOAD( "c21-07.57", 0x00000, 0x08000, CRC(f02292bd) SHA1(0a5c06a048ad67f90e0d766b504582e9eef035f7) )
+ROM_END
+
+ROM_START( cadashf )
+ ROM_REGION( 0x80000, "maincpu", 0 ) /* 512k for 68000 code */
+ ROM_LOAD16_BYTE( "c21-19", 0x00000, 0x20000, CRC(4d70543b) SHA1(4fc8d4a9f978232a484af3d91bf8eea2afc839a7) )
+ ROM_LOAD16_BYTE( "c21-21", 0x00001, 0x20000, CRC(0e5b9950) SHA1(872919bab057fc9e5baffe5dfe35b1b8c1ed0105) )
+ ROM_LOAD16_BYTE( "c21-18", 0x40000, 0x20000, CRC(8a19e59b) SHA1(b42a0c8273ca6f202a5dc6e33965423da3b074d8) )
+ ROM_LOAD16_BYTE( "c21-20", 0x40001, 0x20000, CRC(b96acfd9) SHA1(d05b55fd5bbf8fd0e5a7272d1951f27a4900371f) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD( "c21-02.9", 0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD( "c21-01.1", 0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */
+
+ ROM_REGION( 0x1c000, "audiocpu", 0 ) /* sound cpu */
+ ROM_LOAD( "c21-08.38", 0x00000, 0x04000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) )
+ ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */
+
+ ROM_REGION( 0x08000, "subcpu", 0 ) /* 2 machine interface mcu rom ? */
+ ROM_LOAD( "c21-07.57", 0x00000, 0x08000, CRC(f02292bd) SHA1(0a5c06a048ad67f90e0d766b504582e9eef035f7) )
+ROM_END
+
+ROM_START( cadashg )
+ ROM_REGION( 0x80000, "maincpu", 0 ) /* 512k for 68000 code */
+ ROM_LOAD16_BYTE( "c21-23-1.12", 0x00000, 0x20000, CRC(30ddbabe) SHA1(f48ea6fe36c4d9fe291232fd7adddb8f3547270f) )
+ ROM_LOAD16_BYTE( "c21-25-1.16", 0x00001, 0x20000, CRC(24e10611) SHA1(6f406267777dd693a3869ccb34fe3f2f8dea857d) )
+ ROM_LOAD16_BYTE( "c21-22-1.11", 0x40000, 0x20000, CRC(daf58b2d) SHA1(7a64df848f46f27bb6f9757ce0cc81311c2f172f) )
+ ROM_LOAD16_BYTE( "c21-24-1.15", 0x40001, 0x20000, CRC(2359b93e) SHA1(9a5ce34dd8667a987ab8b6e6246f0ad032af868f) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD( "c21-02.9", 0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD( "c21-01.1", 0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */
+
+ ROM_REGION( 0x1c000, "audiocpu", 0 ) /* sound cpu */
+ ROM_LOAD( "c21-08.38", 0x00000, 0x04000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) )
+ ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */
+
+ ROM_REGION( 0x08000, "subcpu", 0 ) /* 2 machine interface mcu rom ? */
+ ROM_LOAD( "c21-07.57", 0x00000, 0x08000, CRC(f02292bd) SHA1(0a5c06a048ad67f90e0d766b504582e9eef035f7) )
+ROM_END
+
+ROM_START( galmedes )
+ ROM_REGION( 0x100000, "maincpu", 0 ) /* 1024k for 68000 code */
+ ROM_LOAD16_BYTE( "gm-prg1.bin", 0x00000, 0x20000, CRC(32a70753) SHA1(3bd094b7ae600dbc87ba74e8b2d6b86a68346f4f) )
+ ROM_LOAD16_BYTE( "gm-prg0.bin", 0x00001, 0x20000, CRC(fae546a4) SHA1(484cad5287daa495b347f6b5b065f3b3d02d8f0e) )
+ /* 0x40000 - 0x7ffff is intentionally empty */
+ ROM_LOAD16_WORD( "gm-30.rom", 0x80000, 0x80000, CRC(4da2a407) SHA1(7bd0eb629dd7022a16e328612c786c544267f7bc) ) /* Fix ROM */
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD( "gm-scn.bin", 0x00000, 0x80000, CRC(3bab0581) SHA1(56b79a4ffd9f4880a63450b7d1b79f029de75e20) ) /* SCR tiles (8 x 8) */
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD( "gm-obj.bin", 0x00000, 0x80000, CRC(7a4a1315) SHA1(e2010ee4222415fd55ba3102003be4151d29e39b) ) /* Sprites (16 x 16) */
+
+ ROM_REGION( 0x1c000, "audiocpu", 0 ) /* sound cpu */
+ ROM_LOAD( "gm-snd.bin", 0x00000, 0x04000, CRC(d6f56c21) SHA1(ff9743448ac8ce57a2f8c33a26145e7b92cbe3c3) )
+ ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */
+ROM_END
+
+ROM_START( earthjkr )
+ ROM_REGION( 0x100000, "maincpu", 0 ) /* 1024k for 68000 code */
+ ROM_LOAD16_BYTE( "ej_3b.rom", 0x00000, 0x20000, CRC(bdd86fc2) SHA1(96578860ed03718f8a68847b367eac6c81b79ca2) )
+ ROM_LOAD16_BYTE( "ej_3a.rom", 0x00001, 0x20000, CRC(9c8050c6) SHA1(076c882f75787e8120de66ff0dcd2cb820513c45) )
+ /* 0x40000 - 0x7ffff is intentionally empty */
+ ROM_LOAD16_WORD( "ej_30e.rom", 0x80000, 0x80000, CRC(49d1f77f) SHA1(f6c9b2fc88b77cc9baa5be48da5c3eb72310e471) ) /* Fix ROM */
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD( "ej_chr.rom", 0x00000, 0x80000, CRC(ac675297) SHA1(2a34e1eae3a4be84dbf709053f5e8a781b1073fc) ) /* SCR tiles (8 x 8) */
+
+ ROM_REGION( 0xa0000, "gfx2", 0 )
+ ROM_LOAD ( "ej_obj.rom", 0x00000, 0x80000, CRC(5f21ac47) SHA1(45c94ffb53ee9b822b0676f6fb151fed4ce6d967) ) /* Sprites (16 x 16) */
+ ROM_LOAD16_BYTE( "ej_1.rom", 0x80000, 0x10000, CRC(cb4891db) SHA1(af1112608cdd897ef6028ef617f5ca69d7964861) )
+ ROM_LOAD16_BYTE( "ej_0.rom", 0x80001, 0x10000, CRC(b612086f) SHA1(625748fcb698ec57b7b3ce46019cf85de99aaaa1) )
+
+ ROM_REGION( 0x1c000, "audiocpu", 0 ) /* sound cpu */
+ ROM_LOAD( "ej_2.rom", 0x00000, 0x04000, CRC(42ba2566) SHA1(c437388684b565c7504d6bad6accd73aa000faca) )
+ ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */
+ROM_END
+
+ROM_START( eto )
+ ROM_REGION( 0x100000, "maincpu", 0 ) /* 1024k for 68000 code */
+ ROM_LOAD16_BYTE( "eto-1.23", 0x00000, 0x20000, CRC(44286597) SHA1(ac37e5edbf9d187f60232adc5e9ebed45b3d2fe2) )
+ ROM_LOAD16_BYTE( "eto-0.8", 0x00001, 0x20000, CRC(57b79370) SHA1(25f83eada982ef654260fe92016d42a90005a05c) )
+ /* 0x40000 - 0x7ffff is intentionally empty */
+ ROM_LOAD16_WORD( "eto-2.30", 0x80000, 0x80000, CRC(12f46fb5) SHA1(04db8b6ccd0051668bd2930275efa0265c0cfd2b) ) /* Fix ROM */
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD( "eto-4.3", 0x00000, 0x80000, CRC(a8768939) SHA1(a2cbbd3e10ed48ba32a680b2e40ea03900cf33fa) ) /* Sprites (16 x 16) */
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD( "eto-3.6", 0x00000, 0x80000, CRC(dd247397) SHA1(53a7bf877fd7e5f3daf295a698f4012447b6f113) ) /* SCR tiles (8 x 8) */
+
+ ROM_REGION( 0x1c000, "audiocpu", 0 ) /* sound cpu */
+ ROM_LOAD( "eto-5.27", 0x00000, 0x04000, CRC(b3689da0) SHA1(812d2e0a794403df9f0a5035784f14cd070ea080) )
+ ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */
+ROM_END
+
+
+GAME( 1988, bonzeadv, 0, bonzeadv, bonzeadv, 0, ROT0, "Taito Corporation Japan", "Bonze Adventure (World, Newer)", GAME_SUPPORTS_SAVE )
+GAME( 1988, bonzeadvo, bonzeadv, bonzeadv, bonzeadv, 0, ROT0, "Taito Corporation Japan", "Bonze Adventure (World, Older)", GAME_SUPPORTS_SAVE )
+GAME( 1988, bonzeadvu, bonzeadv, bonzeadv, jigkmgri, 0, ROT0, "Taito America Corporation", "Bonze Adventure (US)", GAME_SUPPORTS_SAVE )
+GAME( 1988, jigkmgri, bonzeadv, bonzeadv, jigkmgri, 0, ROT0, "Taito Corporation", "Jigoku Meguri (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1988, asuka, 0, asuka, asuka, 0, ROT270, "Taito Corporation", "Asuka & Asuka (World)", GAME_SUPPORTS_SAVE )
+GAME( 1988, asukaj, asuka, asuka, asuka, 0, ROT270, "Taito Corporation", "Asuka & Asuka (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1989, mofflott, 0, mofflott, mofflott, 0, ROT270, "Taito Corporation", "Maze of Flott (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1989, cadash, 0, cadash, cadash, 0, ROT0, "Taito Corporation Japan", "Cadash (World)", GAME_SUPPORTS_SAVE )
+GAME( 1989, cadashj, cadash, cadash, cadashj, 0, ROT0, "Taito Corporation", "Cadash (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1989, cadashu, cadash, cadash, cadashu, 0, ROT0, "Taito America Corporation", "Cadash (US)", GAME_SUPPORTS_SAVE )
+GAME( 1989, cadashi, cadash, cadash, cadash, 0, ROT0, "Taito Corporation Japan", "Cadash (Italy)", GAME_SUPPORTS_SAVE )
+GAME( 1989, cadashf, cadash, cadash, cadash, 0, ROT0, "Taito Corporation Japan", "Cadash (France)", GAME_SUPPORTS_SAVE )
+GAME( 1989, cadashg, cadash, cadash, cadash, 0, ROT0, "Taito Corporation Japan", "Cadash (Germany)", GAME_SUPPORTS_SAVE )
+GAME( 1992, galmedes, 0, galmedes, galmedes, 0, ROT270, "Visco", "Galmedes (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1993, earthjkr, 0, galmedes, earthjkr, 0, ROT270, "Visco", "U.N. Defense Force: Earth Joker", GAME_SUPPORTS_SAVE )
+GAME( 1994, eto, 0, eto, eto, 0, ROT0, "Visco", "Kokontouzai Eto Monogatari (Japan)", GAME_SUPPORTS_SAVE )