diff options
Diffstat (limited to 'src/mame/drivers/asuka.c')
-rw-r--r-- | src/mame/drivers/asuka.c | 1426 |
1 files changed, 1426 insertions, 0 deletions
diff --git a/src/mame/drivers/asuka.c b/src/mame/drivers/asuka.c new file mode 100644 index 00000000000..30c9e8ae2bb --- /dev/null +++ b/src/mame/drivers/asuka.c @@ -0,0 +1,1426 @@ +/*************************************************************************** + +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 'bonzeadu' + + - Region stored at 0x03fffe.w + - Sets : + * 'bonzeadv' : region = 0x0002 + * 'jigkmgri' : region = 0x0000 + * 'bonzeadu' : 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 + * 0x0002 (World) uses TAITO_COINAGE_WORLD + - 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) 'bonzeado' + + - Region stored at 0x03fffe.w + - Sets : + * 'bonzeado' : 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 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 + * 0x0003 (World) uses TAITO_COINAGE_WORLD + - 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 + * 0x0002 (US) uses TAITO_COINAGE_US + * 0x0003 (World) uses TAITO_COINAGE_WORLD + - 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 + * "Mode B" uses TAITO_COINAGE_WORLD + - Notice screen + + +7) 'earthjkr' + + - No region (not a Taito game anyway) + - Game uses TAITO_COINAGE_JAPAN_OLD + - 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 + - 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. + +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. + +***************************************************************************/ + +#include "driver.h" +#include "taitoipt.h" +#include "video/taitoic.h" +#include "audio/taitosnd.h" +#include "sound/2610intf.h" +#include "sound/2151intf.h" +#include "sound/msm5205.h" + +WRITE16_HANDLER( asuka_spritectrl_w ); + +INTERRUPT_GEN( rastan_s_interrupt ); + +VIDEO_START( asuka ); +VIDEO_START( galmedes ); +VIDEO_START( cadash ); +VIDEO_UPDATE( asuka ); +VIDEO_UPDATE( bonzeadv ); + +READ16_HANDLER( bonzeadv_cchip_r ); +READ16_HANDLER( bonzeadv_cchip_ctrl_r ); +READ16_HANDLER( bonzeadv_cchip_ram_r ); +WRITE16_HANDLER( bonzeadv_cchip_ctrl_w ); +WRITE16_HANDLER( bonzeadv_cchip_bank_w ); +WRITE16_HANDLER( bonzeadv_cchip_ram_w ); + + +/*********************************************************** + INTERRUPTS +***********************************************************/ + +static TIMER_CALLBACK( cadash_interrupt5 ) +{ + cpunum_set_input_line(0, 5, HOLD_LINE); +} + +static INTERRUPT_GEN( cadash_interrupt ) +{ + timer_set(ATTOTIME_IN_CYCLES(500,0),0, cadash_interrupt5); + cpunum_set_input_line(0, 4, HOLD_LINE); /* interrupt vector 4 */ +} + + +/************************************************ + SOUND +************************************************/ + +static WRITE8_HANDLER( sound_bankswitch_w ) +{ + memory_set_bankptr( 1, memory_region(REGION_CPU2) + ((data-1) & 0x03) * 0x4000 + 0x10000 ); +} + + + +static int adpcm_pos; + +static void asuka_msm5205_vck(int chip) +{ + static int adpcm_data = -1; + + if (adpcm_data != -1) + { + MSM5205_data_w(0, adpcm_data & 0x0f); + adpcm_data = -1; + } + else + { + adpcm_data = memory_region(REGION_SOUND1)[adpcm_pos]; + adpcm_pos = (adpcm_pos + 1) & 0xffff; + MSM5205_data_w(0, adpcm_data >> 4); + } +} + +static WRITE8_HANDLER( asuka_msm5205_address_w ) +{ + adpcm_pos = (adpcm_pos & 0x00ff) | (data << 8); +} + +static WRITE8_HANDLER( asuka_msm5205_start_w ) +{ + MSM5205_reset_w(0, 0); +} + +static WRITE8_HANDLER( asuka_msm5205_stop_w ) +{ + MSM5205_reset_w(0, 1); + adpcm_pos &= 0xff00; +} + + + +/*********************************************************** + MEMORY STRUCTURES +***********************************************************/ + +static ADDRESS_MAP_START( bonzeadv_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x03ffff) AM_READ(MRA16_ROM) + AM_RANGE(0x080000, 0x0fffff) AM_READ(MRA16_ROM) + AM_RANGE(0x10c000, 0x10ffff) AM_READ(MRA16_RAM) /* main RAM */ + AM_RANGE(0x200000, 0x200007) AM_READ(TC0110PCR_word_r) + AM_RANGE(0x390000, 0x390001) AM_READ(input_port_0_word_r) + AM_RANGE(0x3b0000, 0x3b0001) AM_READ(input_port_1_word_r) + AM_RANGE(0x3d0000, 0x3d0001) AM_READ(MRA16_NOP) + AM_RANGE(0x3e0002, 0x3e0003) AM_READ(taitosound_comm16_lsb_r) + AM_RANGE(0x800000, 0x8007ff) AM_READ(bonzeadv_cchip_ram_r) + AM_RANGE(0x800802, 0x800803) AM_READ(bonzeadv_cchip_ctrl_r) + AM_RANGE(0xc00000, 0xc0ffff) AM_READ(TC0100SCN_word_0_r) /* tilemaps */ + AM_RANGE(0xc20000, 0xc2000f) AM_READ(TC0100SCN_ctrl_word_0_r) + AM_RANGE(0xd00000, 0xd03fff) AM_READ(PC090OJ_word_0_r) /* sprite ram */ +ADDRESS_MAP_END + +static ADDRESS_MAP_START( bonzeadv_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x03ffff) AM_WRITE(MWA16_ROM) + AM_RANGE(0x10c000, 0x10ffff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x200000, 0x200007) AM_WRITE(TC0110PCR_step1_word_w) + AM_RANGE(0x3a0000, 0x3a0001) AM_WRITE(asuka_spritectrl_w) + AM_RANGE(0x3c0000, 0x3c0001) AM_WRITE(watchdog_reset16_w) + AM_RANGE(0x3e0000, 0x3e0001) AM_WRITE(taitosound_port16_lsb_w) + AM_RANGE(0x3e0002, 0x3e0003) AM_WRITE(taitosound_comm16_lsb_w) + AM_RANGE(0x800000, 0x8007ff) AM_WRITE(bonzeadv_cchip_ram_w) + AM_RANGE(0x800802, 0x800803) AM_WRITE(bonzeadv_cchip_ctrl_w) + AM_RANGE(0x800c00, 0x800c01) AM_WRITE(bonzeadv_cchip_bank_w) + AM_RANGE(0xc00000, 0xc0ffff) AM_WRITE(TC0100SCN_word_0_w) /* tilemaps */ + AM_RANGE(0xc20000, 0xc2000f) AM_WRITE(TC0100SCN_ctrl_word_0_w) + AM_RANGE(0xd00000, 0xd03fff) AM_WRITE(PC090OJ_word_0_w) /* sprite ram */ +ADDRESS_MAP_END + +static ADDRESS_MAP_START( asuka_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM) + AM_RANGE(0x100000, 0x103fff) AM_READ(MRA16_RAM) /* RAM */ + AM_RANGE(0x1076f0, 0x1076f1) AM_READ(MRA16_NOP) /* Mofflott init does dummy reads here */ + AM_RANGE(0x200000, 0x20000f) AM_READ(TC0110PCR_word_r) + AM_RANGE(0x3e0000, 0x3e0001) AM_READ(MRA16_NOP) + AM_RANGE(0x3e0002, 0x3e0003) AM_READ(taitosound_comm16_lsb_r) + AM_RANGE(0x400000, 0x40000f) AM_READ(TC0220IOC_halfword_r) + AM_RANGE(0xc00000, 0xc0ffff) AM_READ(TC0100SCN_word_0_r) /* tilemaps */ + AM_RANGE(0xc20000, 0xc2000f) AM_READ(TC0100SCN_ctrl_word_0_r) + AM_RANGE(0xd00000, 0xd03fff) AM_READ(PC090OJ_word_0_r) /* sprite ram */ +ADDRESS_MAP_END + +static ADDRESS_MAP_START( asuka_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM) + AM_RANGE(0x100000, 0x103fff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x200000, 0x20000f) AM_WRITE(TC0110PCR_step1_word_w) + AM_RANGE(0x3a0000, 0x3a0003) AM_WRITE(asuka_spritectrl_w) + AM_RANGE(0x3e0000, 0x3e0001) AM_WRITE(taitosound_port16_lsb_w) + AM_RANGE(0x3e0002, 0x3e0003) AM_WRITE(taitosound_comm16_lsb_w) + AM_RANGE(0x400000, 0x40000f) AM_WRITE(TC0220IOC_halfword_w) + AM_RANGE(0xc00000, 0xc0ffff) AM_WRITE(TC0100SCN_word_0_w) /* tilemaps */ + AM_RANGE(0xc10000, 0xc103ff) AM_WRITE(MWA16_NOP) /* error in Asuka init code */ + AM_RANGE(0xc20000, 0xc2000f) AM_WRITE(TC0100SCN_ctrl_word_0_w) + AM_RANGE(0xd00000, 0xd03fff) AM_WRITE(PC090OJ_word_0_w) /* sprite ram */ +ADDRESS_MAP_END + +static ADDRESS_MAP_START( cadash_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM) + AM_RANGE(0x0c0000, 0x0c0001) AM_READ(MRA16_NOP) + AM_RANGE(0x0c0002, 0x0c0003) AM_READ(taitosound_comm16_lsb_r) + AM_RANGE(0x100000, 0x107fff) AM_READ(MRA16_RAM) /* RAM */ + AM_RANGE(0x800000, 0x800fff) AM_READ(MRA16_RAM) /* network ram */ + AM_RANGE(0x900000, 0x90000f) AM_READ(TC0220IOC_halfword_r) + AM_RANGE(0xa00000, 0xa0000f) AM_READ(TC0110PCR_word_r) + AM_RANGE(0xb00000, 0xb03fff) AM_READ(PC090OJ_word_0_r) /* sprite ram */ + AM_RANGE(0xc00000, 0xc0ffff) AM_READ(TC0100SCN_word_0_r) /* tilemaps */ + AM_RANGE(0xc20000, 0xc2000f) AM_READ(TC0100SCN_ctrl_word_0_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( cadash_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM) + AM_RANGE(0x080000, 0x080003) AM_WRITE(asuka_spritectrl_w) + AM_RANGE(0x0c0000, 0x0c0001) AM_WRITE(taitosound_port16_lsb_w) + AM_RANGE(0x0c0002, 0x0c0003) AM_WRITE(taitosound_comm16_lsb_w) + AM_RANGE(0x100000, 0x107fff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x800000, 0x800fff) AM_WRITE(MWA16_RAM) /* network ram */ + AM_RANGE(0x900000, 0x90000f) AM_WRITE(TC0220IOC_halfword_w) + AM_RANGE(0xa00000, 0xa0000f) AM_WRITE(TC0110PCR_step1_4bpg_word_w) + AM_RANGE(0xb00000, 0xb03fff) AM_WRITE(PC090OJ_word_0_w) /* sprite ram */ + AM_RANGE(0xc00000, 0xc0ffff) AM_WRITE(TC0100SCN_word_0_w) /* tilemaps */ + AM_RANGE(0xc20000, 0xc2000f) AM_WRITE(TC0100SCN_ctrl_word_0_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( eto_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM) + AM_RANGE(0x100000, 0x10000f) AM_READ(TC0110PCR_word_r) + AM_RANGE(0x200000, 0x203fff) AM_READ(MRA16_RAM) /* RAM */ + AM_RANGE(0x300000, 0x30000f) AM_READ(TC0220IOC_halfword_r) + AM_RANGE(0x400000, 0x40000f) AM_READ(TC0220IOC_halfword_r) /* service mode mirror */ + AM_RANGE(0x4e0000, 0x4e0001) AM_READ(MRA16_NOP) + AM_RANGE(0x4e0002, 0x4e0003) AM_READ(taitosound_comm16_lsb_r) + AM_RANGE(0xc00000, 0xc03fff) AM_READ(PC090OJ_word_0_r) /* sprite ram */ + AM_RANGE(0xd00000, 0xd0ffff) AM_READ(TC0100SCN_word_0_r) /* tilemaps */ + AM_RANGE(0xd20000, 0xd2000f) AM_READ(TC0100SCN_ctrl_word_0_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( eto_writemem, ADDRESS_SPACE_PROGRAM, 16 ) /* N.B. tc100scn mirror overlaps spriteram */ + AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM) + AM_RANGE(0x100000, 0x10000f) AM_WRITE(TC0110PCR_step1_word_w) + AM_RANGE(0x200000, 0x203fff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x300000, 0x30000f) AM_WRITE(TC0220IOC_halfword_w) + AM_RANGE(0x4a0000, 0x4a0003) AM_WRITE(asuka_spritectrl_w) + AM_RANGE(0x4e0000, 0x4e0001) AM_WRITE(taitosound_port16_lsb_w) + AM_RANGE(0x4e0002, 0x4e0003) AM_WRITE(taitosound_comm16_lsb_w) + AM_RANGE(0xc00000, 0xc03fff) AM_WRITE(PC090OJ_word_0_w) /* sprite ram */ + AM_RANGE(0xc00000, 0xc0ffff) AM_WRITE(TC0100SCN_word_0_w) /* service mode mirror */ + AM_RANGE(0xd00000, 0xd0ffff) AM_WRITE(TC0100SCN_word_0_w) /* tilemaps */ + AM_RANGE(0xd20000, 0xd2000f) AM_WRITE(TC0100SCN_ctrl_word_0_w) +ADDRESS_MAP_END + + +/***************************************************************************/ + +static ADDRESS_MAP_START( bonzeadv_z80_readmem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x3fff) AM_READ(MRA8_ROM) + AM_RANGE(0x4000, 0x7fff) AM_READ(MRA8_BANK1) + AM_RANGE(0xc000, 0xdfff) AM_READ(MRA8_RAM) + AM_RANGE(0xe000, 0xe000) AM_READ(YM2610_status_port_0_A_r) + AM_RANGE(0xe001, 0xe001) AM_READ(YM2610_read_port_0_r) + AM_RANGE(0xe002, 0xe002) AM_READ(YM2610_status_port_0_B_r) + AM_RANGE(0xe201, 0xe201) AM_READ(taitosound_slave_comm_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( bonzeadv_z80_writemem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_WRITE(MWA8_ROM) + AM_RANGE(0xc000, 0xdfff) AM_WRITE(MWA8_RAM) + AM_RANGE(0xe000, 0xe000) AM_WRITE(YM2610_control_port_0_A_w) + AM_RANGE(0xe001, 0xe001) AM_WRITE(YM2610_data_port_0_A_w) + AM_RANGE(0xe002, 0xe002) AM_WRITE(YM2610_control_port_0_B_w) + AM_RANGE(0xe003, 0xe003) AM_WRITE(YM2610_data_port_0_B_w) + AM_RANGE(0xe200, 0xe200) AM_WRITE(taitosound_slave_port_w) + AM_RANGE(0xe201, 0xe201) AM_WRITE(taitosound_slave_comm_w) + AM_RANGE(0xe400, 0xe403) AM_WRITE(MWA8_NOP) /* pan */ + AM_RANGE(0xe600, 0xe600) AM_WRITE(MWA8_NOP) + AM_RANGE(0xee00, 0xee00) AM_WRITE(MWA8_NOP) + AM_RANGE(0xf000, 0xf000) AM_WRITE(MWA8_NOP) + AM_RANGE(0xf200, 0xf200) AM_WRITE(sound_bankswitch_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( z80_readmem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x3fff) AM_READ(MRA8_ROM) + AM_RANGE(0x4000, 0x7fff) AM_READ(MRA8_BANK1) + AM_RANGE(0x8000, 0x8fff) AM_READ(MRA8_RAM) + AM_RANGE(0x9001, 0x9001) AM_READ(YM2151_status_port_0_r) + AM_RANGE(0x9002, 0x9100) AM_READ(MRA8_RAM) + AM_RANGE(0xa001, 0xa001) AM_READ(taitosound_slave_comm_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( z80_writemem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_WRITE(MWA8_ROM) + AM_RANGE(0x8000, 0x8fff) AM_WRITE(MWA8_RAM) + AM_RANGE(0x9000, 0x9000) AM_WRITE(YM2151_register_port_0_w) + AM_RANGE(0x9001, 0x9001) AM_WRITE(YM2151_data_port_0_w) + AM_RANGE(0xa000, 0xa000) AM_WRITE(taitosound_slave_port_w) + AM_RANGE(0xa001, 0xa001) AM_WRITE(taitosound_slave_comm_w) + AM_RANGE(0xb000, 0xb000) AM_WRITE(asuka_msm5205_address_w) + AM_RANGE(0xc000, 0xc000) AM_WRITE(asuka_msm5205_start_w) + AM_RANGE(0xd000, 0xd000) AM_WRITE(asuka_msm5205_stop_w) +ADDRESS_MAP_END + +/* no MSM5205 */ +static ADDRESS_MAP_START( cadash_z80_writemem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_WRITE(MWA8_ROM) + AM_RANGE(0x8000, 0x8fff) AM_WRITE(MWA8_RAM) + AM_RANGE(0x9000, 0x9000) AM_WRITE(YM2151_register_port_0_w) + AM_RANGE(0x9001, 0x9001) AM_WRITE(YM2151_data_port_0_w) + AM_RANGE(0xa000, 0xa000) AM_WRITE(taitosound_slave_port_w) + AM_RANGE(0xa001, 0xa001) AM_WRITE(taitosound_slave_comm_w) +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_TAG("DSWA") + TAITO_MACHINE_COCKTAIL + TAITO_COINAGE_WORLD + + /* 0x3b0000 -> 0x10cb7e ($b7e,A5) */ + PORT_START_TAG("DSWB") + TAITO_DIFFICULTY + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) ) /* 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_DIPSETTING( 0x20, "2" ) + PORT_DIPSETTING( 0x30, "3" ) + PORT_DIPSETTING( 0x10, "4" ) + PORT_DIPSETTING( 0x00, "5" ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) ) + PORT_DIPSETTING( 0x40, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) /* see notes */ + + PORT_START_TAG("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_TAG("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_TAG("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_TAG("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 +INPUT_PORTS_END + +static INPUT_PORTS_START( asuka ) + /* 0x400000 -> 0x103618 */ + PORT_START_TAG("DSWA") + TAITO_MACHINE_NO_COCKTAIL + TAITO_COINAGE_JAPAN_OLD + + /* 0x400002 -> 0x10361c */ + PORT_START_TAG("DSWB") + TAITO_DIFFICULTY + PORT_DIPNAME( 0x0c, 0x0c, "Bonus Points" ) /* 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_DIPSETTING( 0x10, "1" ) + PORT_DIPSETTING( 0x20, "2" ) + PORT_DIPSETTING( 0x30, "3" ) + PORT_DIPSETTING( 0x00, "4" ) + PORT_DIPNAME( 0xc0, 0x40, DEF_STR( Allow_Continue ) ) + 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_TAG("IN0") + TAITO_JOY_UDLR_2_BUTTONS( 1 ) + + PORT_START_TAG("IN1") + TAITO_JOY_UDLR_2_BUTTONS( 2 ) + + PORT_START_TAG("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 + TAITO_COINAGE_JAPAN_OLD + + /* 0x400002 -> 0x100a93.b */ + PORT_MODIFY("DSWB") + TAITO_DIFFICULTY + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) ) + 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_DIPSETTING( 0x00, "2" ) + PORT_DIPSETTING( 0x30, "3" ) + PORT_DIPSETTING( 0x10, "4" ) + PORT_DIPSETTING( 0x20, "5" ) + PORT_DIPNAME( 0x40, 0x40, "Invulnerability (Cheat)") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Number of Keys" ) + PORT_DIPSETTING( 0x00, "14" ) /* Hard */ + PORT_DIPSETTING( 0x80, "16" ) /* Easy */ +INPUT_PORTS_END + +/* different players and system inputs than 'asuka' */ +static INPUT_PORTS_START( cadash ) + /* 0x900000 -> 0x10317a ($317a,A5) */ + PORT_START_TAG("DSWA") + TAITO_MACHINE_NO_COCKTAIL + TAITO_COINAGE_WORLD + + /* 0x900002 -> 0x10317c ($317c,A5) */ + PORT_START_TAG("DSWB") + TAITO_DIFFICULTY + PORT_DIPNAME( 0x0c, 0x0c, "Starting Time" ) + 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_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_DIPSETTING( 0xc0, "Stand alone" ) + PORT_DIPSETTING( 0x80, "Master" ) + PORT_DIPSETTING( 0x00, "Slave" ) +// PORT_DIPSETTING( 0x40, "Stand alone" ) + + PORT_START_TAG("IN0") + CADASH_PLAYERS_INPUT( 1 ) + + PORT_START_TAG("IN1") + CADASH_PLAYERS_INPUT( 2 ) + + PORT_START_TAG("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 +INPUT_PORTS_END + +static INPUT_PORTS_START( cadashu ) + PORT_INCLUDE(cadash) + + PORT_MODIFY("DSWA") + TAITO_COINAGE_US +INPUT_PORTS_END + +static INPUT_PORTS_START( galmedes ) + PORT_INCLUDE(asuka) + + /* 0x400000 -> 0x100982 */ + PORT_MODIFY("DSWA") + TAITO_MACHINE_NO_COCKTAIL + PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_A ) ) + 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_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 + PORT_DIPNAME( 0x0c, 0x08, DEF_STR( Bonus_Life ) ) + 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_DIPSETTING( 0x20, "1" ) + PORT_DIPSETTING( 0x10, "2" ) + PORT_DIPSETTING( 0x30, "3" ) + PORT_DIPSETTING( 0x00, "4" ) + PORT_DIPUNUSED( 0x40, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x80, 0x80, "Coin Mode" ) + 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) + + /* 0x400000 -> 0x100932 */ + PORT_MODIFY("DSWA") + TAITO_MACHINE_NO_COCKTAIL + TAITO_COINAGE_JAPAN_OLD + + /* 0x400002 -> 0x1009842 */ + PORT_MODIFY("DSWB") + TAITO_DIFFICULTY + PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) ) + 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_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x30, "2" ) + PORT_DIPSETTING( 0x20, "3" ) + PORT_DIPSETTING( 0x10, "4" ) + PORT_DIPNAME( 0x40, 0x40, "Copyright" ) /* 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( 0x80, IP_ACTIVE_LOW ) +INPUT_PORTS_END + +static INPUT_PORTS_START( eto ) + PORT_INCLUDE(asuka) + + /* 0x300000 -> 0x200914 */ + PORT_MODIFY("DSWA") + TAITO_MACHINE_NO_COCKTAIL + TAITO_COINAGE_JAPAN_OLD + + /* 0x300002 -> 0x200916 */ + PORT_MODIFY("DSWB") + TAITO_DIFFICULTY + PORT_DIPUNUSED( 0x04, IP_ACTIVE_LOW ) + PORT_DIPUNUSED( 0x08, IP_ACTIVE_LOW ) + PORT_DIPUNUSED( 0x10, IP_ACTIVE_LOW ) + PORT_DIPUNUSED( 0x20, IP_ACTIVE_LOW ) /* value stored at 0x20090a but not read back */ + PORT_DIPUNUSED( 0x40, IP_ACTIVE_LOW ) + PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) +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( REGION_GFX2, 0, tilelayout, 0, 256 ) /* OBJ */ + GFXDECODE_ENTRY( REGION_GFX1, 0, charlayout, 0, 256 ) /* SCR */ +GFXDECODE_END + + + +/************************************************************** + SOUND +**************************************************************/ + +static void irq_handler(int irq) +{ + cpunum_set_input_line(1,0,irq ? ASSERT_LINE : CLEAR_LINE); +} + +static struct YM2610interface ym2610_interface = +{ + irq_handler, + REGION_SOUND1, /* Delta-T */ + REGION_SOUND1 /* ADPCM */ +}; + + +static struct YM2151interface ym2151_interface = +{ + irq_handler, + sound_bankswitch_w +}; + +static struct MSM5205interface msm5205_interface = +{ + asuka_msm5205_vck, /* VCK function */ + MSM5205_S48_4B /* 8 kHz */ +}; + + +/*********************************************************** + MACHINE DRIVERS +***********************************************************/ + +static VIDEO_EOF( asuka ) +{ + PC090OJ_eof_callback(); +} + + +static MACHINE_DRIVER_START( bonzeadv ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 8000000) /* checked on PCB */ + MDRV_CPU_PROGRAM_MAP(bonzeadv_readmem,bonzeadv_writemem) + MDRV_CPU_VBLANK_INT(irq4_line_hold,1) + + MDRV_CPU_ADD(Z80,4000000) /* sound CPU, also required for test mode */ + MDRV_CPU_PROGRAM_MAP(bonzeadv_z80_readmem,bonzeadv_z80_writemem) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + MDRV_INTERLEAVE(10) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(40*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 3*8, 31*8-1) + MDRV_GFXDECODE(asuka) + MDRV_PALETTE_LENGTH(4096) + + MDRV_VIDEO_START(asuka) + MDRV_VIDEO_EOF(asuka) + MDRV_VIDEO_UPDATE(bonzeadv) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(YM2610, 8000000) + MDRV_SOUND_CONFIG(ym2610_interface) + MDRV_SOUND_ROUTE(0, "mono", 0.25) + MDRV_SOUND_ROUTE(1, "mono", 1.0) + MDRV_SOUND_ROUTE(2, "mono", 1.0) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( asuka ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 8000000) /* 8 MHz ??? */ + MDRV_CPU_PROGRAM_MAP(asuka_readmem,asuka_writemem) + MDRV_CPU_VBLANK_INT(irq5_line_hold,1) + + MDRV_CPU_ADD(Z80, 4000000) /* 4 MHz ??? */ + MDRV_CPU_PROGRAM_MAP(z80_readmem,z80_writemem) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + MDRV_INTERLEAVE(10) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(40*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 32*8-1) + MDRV_GFXDECODE(asuka) + MDRV_PALETTE_LENGTH(4096) + + MDRV_VIDEO_START(asuka) + MDRV_VIDEO_EOF(asuka) + MDRV_VIDEO_UPDATE(asuka) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(YM2151, 4000000) + MDRV_SOUND_CONFIG(ym2151_interface) + MDRV_SOUND_ROUTE(0, "mono", 0.50) + MDRV_SOUND_ROUTE(1, "mono", 0.50) + + MDRV_SOUND_ADD(MSM5205, 384000) + MDRV_SOUND_CONFIG(msm5205_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( cadash ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 12000000) /* 12 MHz ??? */ + MDRV_CPU_PROGRAM_MAP(cadash_readmem,cadash_writemem) + MDRV_CPU_VBLANK_INT(cadash_interrupt,1) + + MDRV_CPU_ADD(Z80, 4000000) /* 4 MHz ??? */ + MDRV_CPU_PROGRAM_MAP(z80_readmem,cadash_z80_writemem) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + MDRV_INTERLEAVE(10) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(40*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 32*8-1) + MDRV_GFXDECODE(asuka) + MDRV_PALETTE_LENGTH(4096) + + MDRV_VIDEO_START(cadash) + MDRV_VIDEO_EOF(asuka) + MDRV_VIDEO_UPDATE(bonzeadv) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(YM2151, 4000000) + MDRV_SOUND_CONFIG(ym2151_interface) + MDRV_SOUND_ROUTE(0, "mono", 0.50) + MDRV_SOUND_ROUTE(1, "mono", 0.50) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( mofflott ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 8000000) /* 8 MHz ??? */ + MDRV_CPU_PROGRAM_MAP(asuka_readmem,asuka_writemem) + MDRV_CPU_VBLANK_INT(irq5_line_hold,1) + + MDRV_CPU_ADD(Z80, 4000000) /* 4 MHz ??? */ + MDRV_CPU_PROGRAM_MAP(z80_readmem,z80_writemem) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + MDRV_INTERLEAVE(10) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(40*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 32*8-1) + MDRV_GFXDECODE(asuka) + MDRV_PALETTE_LENGTH(4096) /* only Mofflott uses full palette space */ + + MDRV_VIDEO_START(galmedes) + MDRV_VIDEO_EOF(asuka) + MDRV_VIDEO_UPDATE(asuka) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(YM2151, 4000000) + MDRV_SOUND_CONFIG(ym2151_interface) + MDRV_SOUND_ROUTE(0, "mono", 0.50) + MDRV_SOUND_ROUTE(1, "mono", 0.50) + + MDRV_SOUND_ADD(MSM5205, 384000) + MDRV_SOUND_CONFIG(msm5205_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( galmedes ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 8000000) /* 8 MHz ??? */ + MDRV_CPU_PROGRAM_MAP(asuka_readmem,asuka_writemem) + MDRV_CPU_VBLANK_INT(irq5_line_hold,1) + + MDRV_CPU_ADD(Z80, 4000000) /* 4 MHz ??? */ + MDRV_CPU_PROGRAM_MAP(z80_readmem,cadash_z80_writemem) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + MDRV_INTERLEAVE(10) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(40*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 32*8-1) + MDRV_GFXDECODE(asuka) + MDRV_PALETTE_LENGTH(4096) /* only Mofflott uses full palette space */ + + MDRV_VIDEO_START(galmedes) + MDRV_VIDEO_EOF(asuka) + MDRV_VIDEO_UPDATE(asuka) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(YM2151, 4000000) + MDRV_SOUND_CONFIG(ym2151_interface) + MDRV_SOUND_ROUTE(0, "mono", 0.50) + MDRV_SOUND_ROUTE(1, "mono", 0.50) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( eto ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 8000000) /* 8 MHz ??? */ + MDRV_CPU_PROGRAM_MAP(eto_readmem,eto_writemem) + MDRV_CPU_VBLANK_INT(irq5_line_hold,1) + + MDRV_CPU_ADD(Z80, 4000000) /* 4 MHz ??? */ + MDRV_CPU_PROGRAM_MAP(z80_readmem,cadash_z80_writemem) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + MDRV_INTERLEAVE(10) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(40*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 32*8-1) + MDRV_GFXDECODE(asuka) + MDRV_PALETTE_LENGTH(4096) + + MDRV_VIDEO_START(galmedes) + MDRV_VIDEO_EOF(asuka) + MDRV_VIDEO_UPDATE(asuka) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(YM2151, 4000000) + MDRV_SOUND_CONFIG(ym2151_interface) + MDRV_SOUND_ROUTE(0, "mono", 0.50) + MDRV_SOUND_ROUTE(1, "mono", 0.50) +MACHINE_DRIVER_END + + +/*************************************************************************** + DRIVERS +***************************************************************************/ + +ROM_START( bonzeadv ) + ROM_REGION( 0x100000, REGION_CPU1, 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, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "b41-03.1", 0x00000, 0x80000, CRC(736d35d0) SHA1(7d41a7d71e117714bbd2cdda2953589cda6e763a) ) /* SCR tiles (8 x 8) */ + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "b41-02.7", 0x00000, 0x80000, CRC(29f205d9) SHA1(9e9f0c2755a9aa5acfe2601911bfa07d8d61164c) ) /* Sprites (16 x 16) */ + + ROM_REGION( 0x1c000, REGION_CPU2, 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, REGION_SOUND1, 0 ) /* ADPCM samples */ + ROM_LOAD( "b41-04.48", 0x00000, 0x80000, CRC(c668638f) SHA1(07238a6cb4d93ffaf6351657163b5d80f0dbf688) ) +ROM_END + +ROM_START( bonzeado ) + ROM_REGION( 0x100000, REGION_CPU1, 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, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "b41-03.1", 0x00000, 0x80000, CRC(736d35d0) SHA1(7d41a7d71e117714bbd2cdda2953589cda6e763a) ) /* SCR tiles (8 x 8) */ + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "b41-02.7", 0x00000, 0x80000, CRC(29f205d9) SHA1(9e9f0c2755a9aa5acfe2601911bfa07d8d61164c) ) /* Sprites (16 x 16) */ + + ROM_REGION( 0x1c000, REGION_CPU2, 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, REGION_SOUND1, 0 ) /* ADPCM samples */ + ROM_LOAD( "b41-04.48", 0x00000, 0x80000, CRC(c668638f) SHA1(07238a6cb4d93ffaf6351657163b5d80f0dbf688) ) +ROM_END + +ROM_START( bonzeadu ) + ROM_REGION( 0x100000, REGION_CPU1, 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, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "b41-03.1", 0x00000, 0x80000, CRC(736d35d0) SHA1(7d41a7d71e117714bbd2cdda2953589cda6e763a) ) /* SCR tiles (8 x 8) */ + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "b41-02.7", 0x00000, 0x80000, CRC(29f205d9) SHA1(9e9f0c2755a9aa5acfe2601911bfa07d8d61164c) ) /* Sprites (16 x 16) */ + + ROM_REGION( 0x1c000, REGION_CPU2, 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, REGION_SOUND1, 0 ) /* ADPCM samples */ + ROM_LOAD( "b41-04.48", 0x00000, 0x80000, CRC(c668638f) SHA1(07238a6cb4d93ffaf6351657163b5d80f0dbf688) ) +ROM_END + +ROM_START( jigkmgri ) + ROM_REGION( 0x100000, REGION_CPU1, 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, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "b41-03.1", 0x00000, 0x80000, CRC(736d35d0) SHA1(7d41a7d71e117714bbd2cdda2953589cda6e763a) ) /* Tiles (8 x 8) */ + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "b41-02.7", 0x00000, 0x80000, CRC(29f205d9) SHA1(9e9f0c2755a9aa5acfe2601911bfa07d8d61164c) ) /* Sprites (16 x 16) */ + + ROM_REGION( 0x1c000, REGION_CPU2, 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, REGION_SOUND1, 0 ) /* ADPCM samples */ + ROM_LOAD( "b41-04.48", 0x00000, 0x80000, CRC(c668638f) SHA1(07238a6cb4d93ffaf6351657163b5d80f0dbf688) ) +ROM_END + +ROM_START( asuka ) + ROM_REGION( 0x100000, REGION_CPU1, 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, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "b68-01.bin", 0x00000, 0x80000, CRC(89f32c94) SHA1(74fbb699e05e2336509cb5ac06ed94335ff870d5) ) /* SCR tiles (8 x 8) */ + + ROM_REGION( 0xa0000, REGION_GFX2, ROMREGION_DISPOSE ) + 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, REGION_CPU2, 0 ) /* sound cpu */ + ROM_LOAD( "b68-11.bin", 0x00000, 0x04000, CRC(c378b508) SHA1(1b145fe736b924f298e02532cf9f26cc18b42ca7) ) + ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */ + + ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* ADPCM samples */ + ROM_LOAD( "b68-10.bin", 0x00000, 0x10000, CRC(387aaf40) SHA1(47c583564ef1d49ece15f97221b2e073e8fb0544) ) +ROM_END + +ROM_START( asukaj ) + ROM_REGION( 0x100000, REGION_CPU1, 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, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "b68-01.bin", 0x00000, 0x80000, CRC(89f32c94) SHA1(74fbb699e05e2336509cb5ac06ed94335ff870d5) ) /* SCR tiles (8 x 8) */ + + ROM_REGION( 0xa0000, REGION_GFX2, ROMREGION_DISPOSE ) + 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, REGION_CPU2, 0 ) /* sound cpu */ + ROM_LOAD( "b68-11.bin", 0x00000, 0x04000, CRC(c378b508) SHA1(1b145fe736b924f298e02532cf9f26cc18b42ca7) ) + ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */ + + ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* ADPCM samples */ + ROM_LOAD( "b68-10.bin", 0x00000, 0x10000, CRC(387aaf40) SHA1(47c583564ef1d49ece15f97221b2e073e8fb0544) ) +ROM_END + +ROM_START( mofflott ) + ROM_REGION( 0x100000, REGION_CPU1, 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, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "c17-01.bin", 0x00000, 0x80000, CRC(e9466d42) SHA1(93d533a9a992e3ff537e914577ede41729235826) ) /* SCR tiles (8 x 8) */ + + ROM_REGION( 0xa0000, REGION_GFX2, ROMREGION_DISPOSE ) + 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, REGION_CPU2, 0 ) /* sound cpu */ + ROM_LOAD( "c17-07.bin", 0x00000, 0x04000, CRC(cdb7bc2c) SHA1(5113055c954a39918436db75cc06b53c29c60728) ) + ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */ + + ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* ADPCM samples */ + ROM_LOAD( "c17-06.bin", 0x00000, 0x10000, CRC(5c332125) SHA1(408f42df18b38347c8a4e177a9484162a66877e1) ) +ROM_END + +ROM_START( cadash ) + ROM_REGION( 0x80000, REGION_CPU1, 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, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "c21-02.9", 0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */ + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "c21-01.1", 0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */ + + ROM_REGION( 0x1c000, REGION_CPU2, 0 ) /* sound cpu */ + ROM_LOAD( "c21-08.38", 0x00000, 0x04000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) ) + ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */ + + ROM_REGION( 0x08000, REGION_USER1, 0 ) /* 2 machine interface mcu rom ? */ + ROM_LOAD( "c21-07.57", 0x00000, 0x08000, CRC(f02292bd) SHA1(0a5c06a048ad67f90e0d766b504582e9eef035f7) ) + + ROM_REGION( 0x0800, REGION_PLDS, ROMREGION_DISPOSE ) + 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, REGION_CPU1, 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, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "c21-02.9", 0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */ + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "c21-01.1", 0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */ + + ROM_REGION( 0x1c000, REGION_CPU2, 0 ) /* sound cpu */ + ROM_LOAD( "c21-08.38", 0x00000, 0x04000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) ) + ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */ + + ROM_REGION( 0x08000, REGION_USER1, 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, REGION_CPU1, 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, REGION_GFX1, ROMREGION_DISPOSE ) + // 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, REGION_GFX2, ROMREGION_DISPOSE ) + // 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, REGION_CPU2, 0 ) /* sound cpu */ + ROM_LOAD( "c21-08.38", 0x00000, 0x04000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) ) + ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */ + + ROM_REGION( 0x08000, REGION_USER1, 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, REGION_CPU1, 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, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "c21-02.9", 0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */ + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "c21-01.1", 0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */ + + ROM_REGION( 0x1c000, REGION_CPU2, 0 ) /* sound cpu */ + ROM_LOAD( "c21-08.38", 0x00000, 0x04000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) ) + ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */ + + ROM_REGION( 0x08000, REGION_USER1, 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, REGION_CPU1, 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, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "c21-02.9", 0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */ + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "c21-01.1", 0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */ + + ROM_REGION( 0x1c000, REGION_CPU2, 0 ) /* sound cpu */ + ROM_LOAD( "c21-08.38", 0x00000, 0x04000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) ) + ROM_CONTINUE( 0x10000, 0x0c000 ) /* banked stuff */ + + ROM_REGION( 0x08000, REGION_USER1, 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, REGION_CPU1, 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, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "gm-scn.bin", 0x00000, 0x80000, CRC(3bab0581) SHA1(56b79a4ffd9f4880a63450b7d1b79f029de75e20) ) /* SCR tiles (8 x 8) */ + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "gm-obj.bin", 0x00000, 0x80000, CRC(7a4a1315) SHA1(e2010ee4222415fd55ba3102003be4151d29e39b) ) /* Sprites (16 x 16) */ + + ROM_REGION( 0x1c000, REGION_CPU2, 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, REGION_CPU1, 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, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "ej_chr.rom", 0x00000, 0x80000, CRC(ac675297) SHA1(2a34e1eae3a4be84dbf709053f5e8a781b1073fc) ) /* SCR tiles (8 x 8) */ + + ROM_REGION( 0xa0000, REGION_GFX2, ROMREGION_DISPOSE ) + 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, REGION_CPU2, 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, REGION_CPU1, 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, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "eto-4.3", 0x00000, 0x80000, CRC(a8768939) SHA1(a2cbbd3e10ed48ba32a680b2e40ea03900cf33fa) ) /* Sprites (16 x 16) */ + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "eto-3.6", 0x00000, 0x80000, CRC(dd247397) SHA1(53a7bf877fd7e5f3daf295a698f4012447b6f113) ) /* SCR tiles (8 x 8) */ + + ROM_REGION( 0x1c000, REGION_CPU2, 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)", 0 ) +GAME( 1988, bonzeado, bonzeadv, bonzeadv, bonzeadv, 0, ROT0, "Taito Corporation Japan", "Bonze Adventure (World, Older)", 0 ) +GAME( 1988, bonzeadu, bonzeadv, bonzeadv, jigkmgri, 0, ROT0, "Taito America Corporation", "Bonze Adventure (US)", 0 ) +GAME( 1988, jigkmgri, bonzeadv, bonzeadv, jigkmgri, 0, ROT0, "Taito Corporation", "Jigoku Meguri (Japan)", 0 ) +GAME( 1988, asuka, 0, asuka, asuka, 0, ROT270, "Taito Corporation", "Asuka & Asuka (World)", 0 ) +GAME( 1988, asukaj, asuka, asuka, asuka, 0, ROT270, "Taito Corporation", "Asuka & Asuka (Japan)", 0 ) +GAME( 1989, mofflott, 0, mofflott, mofflott, 0, ROT270, "Taito Corporation", "Maze of Flott (Japan)", 0 ) +GAME( 1989, cadash, 0, cadash, cadash, 0, ROT0, "Taito Corporation Japan", "Cadash (World)", 0 ) +GAME( 1989, cadashj, cadash, cadash, cadashj, 0, ROT0, "Taito Corporation", "Cadash (Japan)", 0 ) +GAME( 1989, cadashu, cadash, cadash, cadashu, 0, ROT0, "Taito America Corporation", "Cadash (US)", 0 ) +GAME( 1989, cadashi, cadash, cadash, cadash, 0, ROT0, "Taito Corporation Japan", "Cadash (Italy)", 0 ) +GAME( 1989, cadashf, cadash, cadash, cadash, 0, ROT0, "Taito Corporation Japan", "Cadash (France)", 0 ) +GAME( 1992, galmedes, 0, galmedes, galmedes, 0, ROT270, "Visco", "Galmedes (Japan)", 0 ) +GAME( 1993, earthjkr, 0, galmedes, earthjkr, 0, ROT270, "Visco", "U.N. Defense Force: Earth Joker", 0 ) +GAME( 1994, eto, 0, eto, eto, 0, ROT0, "Visco", "Kokontouzai Eto Monogatari (Japan)", 0 ) |