diff options
Diffstat (limited to 'trunk/src/mame/drivers/kaneko16.c')
-rw-r--r-- | trunk/src/mame/drivers/kaneko16.c | 3954 |
1 files changed, 3954 insertions, 0 deletions
diff --git a/trunk/src/mame/drivers/kaneko16.c b/trunk/src/mame/drivers/kaneko16.c new file mode 100644 index 00000000000..03c739b7607 --- /dev/null +++ b/trunk/src/mame/drivers/kaneko16.c @@ -0,0 +1,3954 @@ +/*************************************************************************** + + -= Kaneko 16 Bit Games =- + + driver by Luca Elia (l.elia@tin.it) + + +CPU : 68000 + MCU [Optional] + +SOUND : OKI-M6295 x (1 | 2) + YM2149 x (0 | 2) + OR : Z80 + YM2151 + +OTHER : 93C46 EEPROM [Optional] + +CUSTOM : VU-001 046A (48pin PQFP) + VU-002 052 151021 (160pin PQFP) <- Sprites + VU-003 <- High Colour Background + VIEW2-CHIP 23160-509 9047EAI (144pin PQFP) <- Tilemaps + MUX2-CHIP (64pin PQFP) + HELP1-CHIP (64pin PQFP) + IU-001 9045KP002 (44pin PQFP) + I/O JAMMA MC-8282 047 (46pin) <- Inputs + + +---------------------------------------------------------------------------------------- +Year + Game PCB Notes +---------------------------------------------------------------------------------------- +91 The Berlin Wall + Magical Crystals Z00FC-02 +92 Bakuretsu Breaker ZOOFC-02 + Blaze On Z02AT-002 2 VU-002 Sprites Chips (Atlus PCB ID: ATL-67140) + Shogun Warriors ZO1DK-002 CALC3 MCU protection (EEPROM handling, 68k code snippet, data - palettes, tilemaps, fighters) + B.Rap Boys ZO1DK-002 CALC3 MCU protection (EEPROM handling, 68k code snippet, data - palettes, tilemaps, fighters) +94 Great 1000 Miles Rally Z09AF-005 TBSOP01 MCU protection (EEPROM handling etc.) + Bonk's Adventure Z09AF-003 TBSOP01 MCU protection (EEPROM handling, 68k code snippet, data) + Blood Warrior Z09AF-005 TBSOP01 MCU protection (EEPROM handling etc.) +95 Great 1000 Miles Rally 2 M201F00138 TBSOP02 MCU protection (EEPROM handling etc.) +---------------------------------------------------------------------------------------- + +Note: gtmr manual shows "Compatible with AX Kaneko System Board" +Note: Magic Crystals reports "TOYBOX SYSTEM Version 0.93B+" + +Note: Decapping shows the CALC3 MCU to be a NEC uPD78322 series MCU with 16K internal ROM. Both the + TBSOP01 and TBSOP02 are thought to be the NEC uPD78324 series MCU with 32K internal ROM. + +To Do: + +[gtmr] +- Stage 4: The layers' scrolling is very jerky for a couple of seconds + in the middle of this level (probably interrupt related) +- The layers' colours are not initialised when showing the self test + screen and the very first screen (with the Kaneko logo in the middle). + They're probably supposed to be disabled in those occasions, but the + relevant registers aren't changed throughout the game (?) + +[gtmr2] +- Finish the Inputs (different wheels and pedals) +- Find infos about the communication stuff (even if it won't be supported) + +[brapboys / shogwarr] + +- Verify collision protection on real hardware (appears to be a function of the system/memory controller, NOT the MCU) + - currently B.Rap Boys has it's own special case, it should work with the same code as Blood Warriors / Shogun Warriors (and probably SuperNova) +- Figure out how MCU resets writeback address (currently hacked) +- Find relationship between Key tables and final datablock +- Clean up debug code file writes etc. (when above are done only!) +- Interrupt timing? (some sprites flicker) - some sprite flicker exists in youtube videos too, so probably not a bug +- Sprite buffering (1-2 frames?, or related to above) - some bg objects with sprite parts break up in shogun + +Dip locations verified from manual for: + +- berlwall +- mgcrystl +- blazeon +- bakubrkr +- bloodwar +- gtmr +- gtmr2 +- shogwarr + +[general] +- replace sample bank copying with new ADDRESS MAP system for OKI and do banking like CPUs + +***************************************************************************/ + +#include "emu.h" +#include "cpu/z80/z80.h" +#include "cpu/m68000/m68000.h" +#include "deprecat.h" +#include "machine/eeprom.h" +#include "includes/kaneko16.h" +#include "sound/2203intf.h" +#include "sound/2151intf.h" +#include "sound/okim6295.h" + + +/*************************************************************************** + + + Machine Initialisation + + +***************************************************************************/ + +MACHINE_RESET( kaneko16 ) +{ + kaneko16_state *state = machine.driver_data<kaneko16_state>(); + state->m_sprite_type = 0; + + state->m_sprite_xoffs = 0; + state->m_sprite_yoffs = 0; + + state->m_sprite_fliptype = 0; + +/* + Sx = Sprites with priority x, x = tiles with priority x, + Sprites - Tiles Order (bottom -> top): + + 0 S0 1 2 3 + 0 1 S1 2 3 + 0 1 2 S2 3 + 0 1 2 3 S3 +*/ + state->m_priority.sprite[0] = 1; // above tile[0], below the others + state->m_priority.sprite[1] = 2; // above tile[0-1], below the others + state->m_priority.sprite[2] = 3; // above tile[0-2], below the others + state->m_priority.sprite[3] = 8; // above all +} + +static MACHINE_RESET( berlwall ) +{ + kaneko16_state *state = machine.driver_data<kaneko16_state>(); + MACHINE_RESET_CALL(kaneko16); + + state->m_sprite_type = 2; // like type 0, but using 16 instead of 8 bytes +} + +static MACHINE_RESET( blazeon ) +{ + kaneko16_state *state = machine.driver_data<kaneko16_state>(); + MACHINE_RESET_CALL(kaneko16); + + state->m_sprite_xoffs = 0x10000 - 0x680; + state->m_sprite_yoffs = 0x000; + +/* + Sx = Sprites with priority x, x = tiles with priority x, + Sprites - Tiles Order (bottom -> top): + + 0 S0 1 2 3 + 0 1 S1 2 3 + 0 1 2 3 S2 + 0 1 2 3 S3 +*/ + state->m_priority.sprite[0] = 1; // above tile[0], below the others + state->m_priority.sprite[1] = 2; // above tile[0-1], below the others + state->m_priority.sprite[2] = 8; // above all + state->m_priority.sprite[3] = 8; // "" +} + +static MACHINE_RESET( bloodwar ) +{ + kaneko16_state *state = machine.driver_data<kaneko16_state>(); + state->m_priority.sprite[0] = 2; // ever used ? + state->m_priority.sprite[1] = 3; // character selection / vs. portraits + state->m_priority.sprite[2] = 5; // winning portrait + state->m_priority.sprite[3] = 7; + + state->m_sprite_type = 1; + + state->m_priority.VIEW2_2_pri = 1; + + state->m_toybox_mcu_run = bloodwar_mcu_run; + toybox_mcu_init(machine); +} + +static MACHINE_RESET( bonkadv ) +{ + kaneko16_state *state = machine.driver_data<kaneko16_state>(); + state->m_priority.sprite[0] = 2; // ever used ? + state->m_priority.sprite[1] = 3; // volcano lava on level 2 + state->m_priority.sprite[2] = 5; // in-game player + state->m_priority.sprite[3] = 7; // demostration text + + state->m_sprite_type = 1; + + state->m_priority.VIEW2_2_pri = 1; + + state->m_toybox_mcu_run = bonkadv_mcu_run; + toybox_mcu_init(machine); +} + +static MACHINE_RESET( bakubrkr ) +{ + kaneko16_state *state = machine.driver_data<kaneko16_state>(); + MACHINE_RESET_CALL(kaneko16); + + state->m_priority.sprite[0] = 8; // above all + state->m_priority.sprite[1] = 8; // above all + state->m_priority.sprite[2] = 8; // above all + state->m_priority.sprite[3] = 8; // above all + + state->m_priority.VIEW2_2_pri = 1; +} + +static MACHINE_RESET( gtmr ) +{ + kaneko16_state *state = machine.driver_data<kaneko16_state>(); + MACHINE_RESET_CALL(kaneko16); + + state->m_sprite_type = 1; + + state->m_priority.VIEW2_2_pri = 1; + + state->m_toybox_mcu_run = gtmr_mcu_run; + toybox_mcu_init(machine); +} + +static MACHINE_RESET( mgcrystl ) +{ + kaneko16_state *state = machine.driver_data<kaneko16_state>(); + MACHINE_RESET_CALL(kaneko16); +/* + Sx = Sprites with priority x, x = tiles with priority x, + Sprites - Tiles Order: + + S0: below 0 2 + + S1: over 2 + below 0 + + S2: over 0 2 + + S3: over all + + tiles of the 2nd VIEW2 chip always behind sprites? + +*/ + state->m_priority.sprite[0] = 2; // below all + state->m_priority.sprite[1] = 3; // above tile[0], below the others + state->m_priority.sprite[2] = 5; // above all + state->m_priority.sprite[3] = 7; // "" + + state->m_priority.VIEW2_2_pri = 0; +} + + + +static MACHINE_RESET( shogwarr ) +{ + kaneko16_state *state = machine.driver_data<kaneko16_state>(); + MACHINE_RESET_CALL(kaneko16); + + state->m_sprite_xoffs = 0xa00; + + state->m_sprite_yoffs = -0x40; + + state->m_sprite_type = 0; + state->m_sprite_fliptype = 1; + + state->m_priority.sprite[0] = 1; // below all + state->m_priority.sprite[1] = 3; // above tile[0], below the others + state->m_priority.sprite[2] = 5; // above all + state->m_priority.sprite[3] = 7; // "" + state->m_priority.VIEW2_2_pri = 0; + + calc3_mcu_init(machine); +} + + +/*************************************************************************** + + + Misc Machine Emulation Routines + + +***************************************************************************/ + +static READ16_HANDLER( kaneko16_rnd_r ) +{ + return space->machine().rand() & 0xffff; +} + +static WRITE16_HANDLER( kaneko16_coin_lockout_w ) +{ + if (ACCESSING_BITS_8_15) + { + coin_counter_w(space->machine(), 0, data & 0x0100); + coin_counter_w(space->machine(), 1, data & 0x0200); + coin_lockout_w(space->machine(), 0, (~data) & 0x0400 ); + coin_lockout_w(space->machine(), 1, (~data) & 0x0800 ); + } +} + + + + +/*************************************************************************** + + + Sound + + +***************************************************************************/ + +static WRITE16_HANDLER( kaneko16_soundlatch_w ) +{ + if (ACCESSING_BITS_8_15) + { + soundlatch_w(space, 0, (data & 0xff00) >> 8 ); + cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_NMI, PULSE_LINE); + } +} + +/* Two identically mapped YM2149 chips */ + +static READ16_DEVICE_HANDLER( kaneko16_YM2149_r ) +{ + /* Each 2149 register is mapped to a different address */ + ay8910_address_w(device,0,offset); + return ay8910_r(device,0); +} + +static WRITE16_DEVICE_HANDLER( kaneko16_YM2149_w ) +{ + /* Each 2149 register is mapped to a different address */ + ay8910_address_w(device,0,offset); + /* The registers are mapped to odd addresses, except one! */ + if (ACCESSING_BITS_0_7) ay8910_data_w(device,0, data & 0xff); + else ay8910_data_w(device,0,(data >> 8) & 0xff); +} + + +/*************************************************************************** + + + EEPROM + + +***************************************************************************/ + +static WRITE16_HANDLER( kaneko16_eeprom_w ) +{ + if (ACCESSING_BITS_0_7) + { + input_port_write(space->machine(), "EEPROMOUT", data, 0xff); + } + + if (ACCESSING_BITS_8_15) + { + coin_counter_w(space->machine(), 0, data & 0x0100); + coin_counter_w(space->machine(), 1, data & 0x0200); + coin_lockout_w(space->machine(), 0, data & 0x8000); + coin_lockout_w(space->machine(), 1, data & 0x8000); + } +} + + +/*************************************************************************** + + + Memory Maps - Main CPU + + +***************************************************************************/ + +/*************************************************************************** + The Berlin Wall +***************************************************************************/ + +static ADDRESS_MAP_START( berlwall, AS_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x03ffff) AM_ROM // ROM + AM_RANGE(0x200000, 0x20ffff) AM_RAM // Work RAM + AM_RANGE(0x30e000, 0x30ffff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) // Sprites + AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram16_xGGGGGRRRRRBBBBB_word_w) AM_BASE_GENERIC(paletteram) // Palette +// AM_RANGE(0x480000, 0x480001) AM_RAM // ? + AM_RANGE(0x500000, 0x500001) AM_READWRITE(kaneko16_bg15_reg_r, kaneko16_bg15_reg_w) AM_BASE_MEMBER(kaneko16_state, m_bg15_reg) // High Color Background + AM_RANGE(0x580000, 0x580001) AM_READWRITE(kaneko16_bg15_select_r, kaneko16_bg15_select_w) AM_BASE_MEMBER(kaneko16_state, m_bg15_select) + AM_RANGE(0x600000, 0x60003f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_BASE_MEMBER(kaneko16_state, m_sprites_regs) // Sprites Regs + AM_RANGE(0x680000, 0x680001) AM_READ_PORT("P1") + AM_RANGE(0x680002, 0x680003) AM_READ_PORT("P2") + AM_RANGE(0x680004, 0x680005) AM_READ_PORT("SYSTEM") +// AM_RANGE(0x680006, 0x680007) AM_READ_PORT("UNK") + AM_RANGE(0x700000, 0x700001) AM_WRITE(kaneko16_coin_lockout_w) // Coin Lockout + AM_RANGE(0x780000, 0x780001) AM_READ(watchdog_reset16_r) // Watchdog + AM_RANGE(0x800000, 0x80001f) AM_DEVREADWRITE("ay1", kaneko16_YM2149_r, kaneko16_YM2149_w) // Sound + AM_RANGE(0x800200, 0x80021f) AM_DEVREADWRITE("ay2", kaneko16_YM2149_r, kaneko16_YM2149_w) + AM_RANGE(0x8003fe, 0x8003ff) AM_NOP // for OKI when accessed as .l + AM_RANGE(0x800400, 0x800401) AM_DEVREADWRITE8_MODERN("oki", okim6295_device, read, write, 0x00ff) + AM_RANGE(0xc00000, 0xc00fff) AM_RAM_WRITE(kaneko16_vram_1_w) AM_BASE_MEMBER(kaneko16_state, m_vram[1]) // Layers + AM_RANGE(0xc01000, 0xc01fff) AM_RAM_WRITE(kaneko16_vram_0_w) AM_BASE_MEMBER(kaneko16_state, m_vram[0]) // + AM_RANGE(0xc02000, 0xc02fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[1]) // + AM_RANGE(0xc03000, 0xc03fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[0]) // + AM_RANGE(0xd00000, 0xd0001f) AM_RAM_WRITE(kaneko16_layers_0_regs_w) AM_BASE_MEMBER(kaneko16_state, m_layers_0_regs) // Layers Regs +ADDRESS_MAP_END + + +/*************************************************************************** + Bakuretsu Breaker +***************************************************************************/ + +/* Two un-assigned OKI samples get requested during game play. Leftover bug? */ +/* The two YM2149 chips are only used when entering high score initials, and */ +/* when the game is fully completed. Overkill??? */ + +static WRITE16_DEVICE_HANDLER( bakubrkr_oki_bank_sw ) +{ + if (ACCESSING_BITS_0_7) { + okim6295_device *oki = downcast<okim6295_device *>(device); + oki->set_bank_base(0x40000 * (data & 0x7) ); + logerror("%s:Selecting OKI bank %02X\n",device->machine().describe_context(),data&0xff); + } +} + +static ADDRESS_MAP_START( bakubrkr, AS_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_ROM // ROM + AM_RANGE(0x100000, 0x10ffff) AM_RAM // Work RAM + AM_RANGE(0x400000, 0x40001f) AM_DEVREAD("ay1", kaneko16_YM2149_r) // Sound + AM_RANGE(0x400000, 0x40001d) AM_DEVWRITE("ay1", kaneko16_YM2149_w) + AM_RANGE(0x40001e, 0x40001f) AM_DEVWRITE("oki", bakubrkr_oki_bank_sw) // OKI bank Switch + AM_RANGE(0x400200, 0x40021f) AM_DEVREADWRITE("ay2", kaneko16_YM2149_r,kaneko16_YM2149_w) // Sound + AM_RANGE(0x400400, 0x400401) AM_DEVREADWRITE8_MODERN("oki", okim6295_device, read, write, 0x00ff) // + AM_RANGE(0x500000, 0x500fff) AM_RAM_WRITE(kaneko16_vram_1_w) AM_BASE_MEMBER(kaneko16_state, m_vram[1]) // Layers 0 + AM_RANGE(0x501000, 0x501fff) AM_RAM_WRITE(kaneko16_vram_0_w) AM_BASE_MEMBER(kaneko16_state, m_vram[0]) // + AM_RANGE(0x502000, 0x502fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[1]) // + AM_RANGE(0x503000, 0x503fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[0]) // + AM_RANGE(0x580000, 0x580fff) AM_RAM_WRITE(kaneko16_vram_3_w) AM_BASE_MEMBER(kaneko16_state, m_vram[3]) // Layers 1 + AM_RANGE(0x581000, 0x581fff) AM_RAM_WRITE(kaneko16_vram_2_w) AM_BASE_MEMBER(kaneko16_state, m_vram[2]) // + AM_RANGE(0x582000, 0x582fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[3]) // + AM_RANGE(0x583000, 0x583fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[2]) // + AM_RANGE(0x600000, 0x601fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) // Sprites + AM_RANGE(0x700000, 0x700fff) AM_RAM_WRITE(paletteram16_xGGGGGRRRRRBBBBB_word_w) AM_BASE_GENERIC(paletteram) // Palette + AM_RANGE(0x800000, 0x80001f) AM_RAM_WRITE(kaneko16_layers_0_regs_w) AM_BASE_MEMBER(kaneko16_state, m_layers_0_regs) // Layers 0 Regs + AM_RANGE(0x900000, 0x90001f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_BASE_MEMBER(kaneko16_state, m_sprites_regs ) // Sprites Regs + AM_RANGE(0xa80000, 0xa80001) AM_READ(watchdog_reset16_r) // Watchdog + AM_RANGE(0xb00000, 0xb0001f) AM_RAM_WRITE(kaneko16_layers_1_regs_w) AM_BASE_MEMBER(kaneko16_state, m_layers_1_regs) // Layers 1 Regs + AM_RANGE(0xd00000, 0xd00001) AM_WRITE(kaneko16_eeprom_w) // EEPROM + AM_RANGE(0xe00000, 0xe00001) AM_READ_PORT("P1") + AM_RANGE(0xe00002, 0xe00003) AM_READ_PORT("P2") + AM_RANGE(0xe00004, 0xe00005) AM_READ_PORT("SYSTEM") + AM_RANGE(0xe00006, 0xe00007) AM_READ_PORT("UNK") +ADDRESS_MAP_END + + +/*************************************************************************** + Blaze On +***************************************************************************/ + +static ADDRESS_MAP_START( blazeon, AS_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_ROM // ROM + AM_RANGE(0x300000, 0x30ffff) AM_RAM // Work RAM + AM_RANGE(0x500000, 0x500fff) AM_RAM_WRITE(paletteram16_xGGGGGRRRRRBBBBB_word_w) AM_BASE_GENERIC(paletteram) // Palette + AM_RANGE(0x600000, 0x600fff) AM_RAM_WRITE(kaneko16_vram_1_w) AM_BASE_MEMBER(kaneko16_state, m_vram[1]) // Layers 0 + AM_RANGE(0x601000, 0x601fff) AM_RAM_WRITE(kaneko16_vram_0_w) AM_BASE_MEMBER(kaneko16_state, m_vram[0]) // + AM_RANGE(0x602000, 0x602fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[1]) // + AM_RANGE(0x603000, 0x603fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[0]) // + AM_RANGE(0x700000, 0x700fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) // Sprites + AM_RANGE(0x800000, 0x80001f) AM_RAM_WRITE(kaneko16_layers_0_regs_w) AM_BASE_MEMBER(kaneko16_state, m_layers_0_regs) // Layers 0 Regs + AM_RANGE(0x900000, 0x90001f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_BASE_MEMBER(kaneko16_state, m_sprites_regs) // Sprites Regs #1 + AM_RANGE(0x980000, 0x98001f) AM_RAM // Sprites Regs #2 + AM_RANGE(0xc00000, 0xc00001) AM_READ_PORT("DSW2_P1") + AM_RANGE(0xc00002, 0xc00003) AM_READ_PORT("DSW1_P2") + AM_RANGE(0xc00004, 0xc00005) AM_READ_PORT("UNK") + AM_RANGE(0xc00006, 0xc00007) AM_READ_PORT("SYSTEM") + AM_RANGE(0xd00000, 0xd00001) AM_WRITE(kaneko16_coin_lockout_w) // Coin Lockout + AM_RANGE(0xe00000, 0xe00001) AM_READNOP AM_WRITE(kaneko16_soundlatch_w) // Read = IRQ Ack ? + AM_RANGE(0xe40000, 0xe40001) AM_READNOP // IRQ Ack ? +// AM_RANGE(0xe80000, 0xe80001) AM_READNOP // IRQ Ack ? + AM_RANGE(0xec0000, 0xec0001) AM_READNOP // Lev 4 IRQ Ack ? +ADDRESS_MAP_END + + +/*************************************************************************** + Blood Warrior +***************************************************************************/ + +static WRITE16_DEVICE_HANDLER( bloodwar_oki_0_bank_w ) +{ + if (ACCESSING_BITS_0_7) + { + okim6295_device *oki = downcast<okim6295_device *>(device); + oki->set_bank_base(0x40000 * (data & 0xf) ); +// logerror("CPU #0 PC %06X : OKI0 bank %08X\n",cpu_get_pc(&space->device()),data); + } +} + +static WRITE16_DEVICE_HANDLER( bloodwar_oki_1_bank_w ) +{ + if (ACCESSING_BITS_0_7) + { + okim6295_device *oki = downcast<okim6295_device *>(device); + oki->set_bank_base(0x40000 * data ); +// logerror("CPU #0 PC %06X : OKI1 bank %08X\n",cpu_get_pc(&space->device()),data); + } +} + +static WRITE16_HANDLER( bloodwar_coin_lockout_w ) +{ + if (ACCESSING_BITS_8_15) + { + coin_counter_w(space->machine(), 0, data & 0x0100); + coin_counter_w(space->machine(), 1, data & 0x0200); + coin_lockout_w(space->machine(), 0, data & 0x8000); + coin_lockout_w(space->machine(), 1, data & 0x8000); + } +} + +static ADDRESS_MAP_START( bloodwar, AS_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_ROM // ROM + AM_RANGE(0x100000, 0x10ffff) AM_RAM // Work RAM + AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_mcu_ram) // Shared With MCU + AM_RANGE(0x2a0000, 0x2a0001) AM_WRITE(toybox_mcu_com0_w) // To MCU ? + AM_RANGE(0x2b0000, 0x2b0001) AM_WRITE(toybox_mcu_com1_w) + AM_RANGE(0x2c0000, 0x2c0001) AM_WRITE(toybox_mcu_com2_w) + AM_RANGE(0x2d0000, 0x2d0001) AM_WRITE(toybox_mcu_com3_w) + AM_RANGE(0x300000, 0x30ffff) AM_RAM_WRITE(paletteram16_xGGGGGRRRRRBBBBB_word_w) AM_BASE_GENERIC(paletteram) // Palette + AM_RANGE(0x400000, 0x401fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) // Sprites + AM_RANGE(0x500000, 0x500fff) AM_RAM_WRITE(kaneko16_vram_1_w) AM_BASE_MEMBER(kaneko16_state, m_vram[1]) // Layers 0 + AM_RANGE(0x501000, 0x501fff) AM_RAM_WRITE(kaneko16_vram_0_w) AM_BASE_MEMBER(kaneko16_state, m_vram[0]) // + AM_RANGE(0x502000, 0x502fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[1]) // + AM_RANGE(0x503000, 0x503fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[0]) // + AM_RANGE(0x580000, 0x580fff) AM_RAM_WRITE(kaneko16_vram_3_w) AM_BASE_MEMBER(kaneko16_state, m_vram[3]) // Layers 1 + AM_RANGE(0x581000, 0x581fff) AM_RAM_WRITE(kaneko16_vram_2_w) AM_BASE_MEMBER(kaneko16_state, m_vram[2]) // + AM_RANGE(0x582000, 0x582fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[3]) // + AM_RANGE(0x583000, 0x583fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[2]) // + AM_RANGE(0x600000, 0x60001f) AM_RAM_WRITE(kaneko16_layers_0_regs_w) AM_BASE_MEMBER(kaneko16_state, m_layers_0_regs) // Layers 0 Regs + AM_RANGE(0x680000, 0x68001f) AM_RAM_WRITE(kaneko16_layers_1_regs_w) AM_BASE_MEMBER(kaneko16_state, m_layers_1_regs) // Layers 1 Regs + AM_RANGE(0x700000, 0x70001f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_BASE_MEMBER(kaneko16_state, m_sprites_regs) // Sprites Regs + AM_RANGE(0x800000, 0x800001) AM_DEVREADWRITE8_MODERN("oki1", okim6295_device, read, write, 0x00ff) + AM_RANGE(0x880000, 0x880001) AM_DEVREADWRITE8_MODERN("oki2", okim6295_device, read, write, 0x00ff) + AM_RANGE(0x900000, 0x900039) AM_READWRITE(bloodwar_calc_r, bloodwar_calc_w) + AM_RANGE(0xa00000, 0xa00001) AM_READWRITE(watchdog_reset16_r, watchdog_reset16_w) // Watchdog + AM_RANGE(0xb00000, 0xb00001) AM_READ_PORT("P1") + AM_RANGE(0xb00002, 0xb00003) AM_READ_PORT("P2") + AM_RANGE(0xb00004, 0xb00005) AM_READ_PORT("SYSTEM") + AM_RANGE(0xb00006, 0xb00007) AM_READ_PORT("EXTRA") + AM_RANGE(0xb80000, 0xb80001) AM_WRITE(bloodwar_coin_lockout_w) // Coin Lockout + AM_RANGE(0xc00000, 0xc00001) AM_WRITE(kaneko16_display_enable) + AM_RANGE(0xd00000, 0xd00001) AM_READ(toybox_mcu_status_r) + AM_RANGE(0xe00000, 0xe00001) AM_DEVWRITE("oki1", bloodwar_oki_0_bank_w) + AM_RANGE(0xe80000, 0xe80001) AM_DEVWRITE("oki2", bloodwar_oki_1_bank_w) +ADDRESS_MAP_END + + +/*************************************************************************** + Bonk's Adventure +***************************************************************************/ + +static WRITE16_DEVICE_HANDLER( bonkadv_oki_0_bank_w ) +{ + if (ACCESSING_BITS_0_7) + { + okim6295_device *oki = downcast<okim6295_device *>(device); + oki->set_bank_base(0x40000 * (data & 0xF)); + logerror("%s: OKI0 bank %08X\n",device->machine().describe_context(),data); + } +} + +static WRITE16_DEVICE_HANDLER( bonkadv_oki_1_bank_w ) +{ + if (ACCESSING_BITS_0_7) + { + okim6295_device *oki = downcast<okim6295_device *>(device); + oki->set_bank_base(0x40000 * data ); + logerror("%s: OKI1 bank %08X\n",device->machine().describe_context(),data); + } +} + + +static ADDRESS_MAP_START( bonkadv, AS_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_ROM // ROM + AM_RANGE(0x100000, 0x10ffff) AM_RAM // Work RAM + AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_mcu_ram) // Shared With MCU + AM_RANGE(0x2a0000, 0x2a0001) AM_WRITE(toybox_mcu_com0_w) // To MCU ? + AM_RANGE(0x2b0000, 0x2b0001) AM_WRITE(toybox_mcu_com1_w) + AM_RANGE(0x2c0000, 0x2c0001) AM_WRITE(toybox_mcu_com2_w) + AM_RANGE(0x2d0000, 0x2d0001) AM_WRITE(toybox_mcu_com3_w) + AM_RANGE(0x300000, 0x30ffff) AM_RAM_WRITE(paletteram16_xGGGGGRRRRRBBBBB_word_w) AM_BASE_GENERIC(paletteram) // Palette + AM_RANGE(0x400000, 0x401fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) // Sprites + AM_RANGE(0x500000, 0x500fff) AM_RAM_WRITE(kaneko16_vram_1_w) AM_BASE_MEMBER(kaneko16_state, m_vram[1]) // Layers 0 + AM_RANGE(0x501000, 0x501fff) AM_RAM_WRITE(kaneko16_vram_0_w) AM_BASE_MEMBER(kaneko16_state, m_vram[0]) // + AM_RANGE(0x502000, 0x502fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[1]) // + AM_RANGE(0x503000, 0x503fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[0]) // + AM_RANGE(0x580000, 0x580fff) AM_RAM_WRITE(kaneko16_vram_3_w) AM_BASE_MEMBER(kaneko16_state, m_vram[3]) // Layers 1 + AM_RANGE(0x581000, 0x581fff) AM_RAM_WRITE(kaneko16_vram_2_w) AM_BASE_MEMBER(kaneko16_state, m_vram[2]) // + AM_RANGE(0x582000, 0x582fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[3]) // + AM_RANGE(0x583000, 0x583fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[2]) // + AM_RANGE(0x600000, 0x60001f) AM_RAM_WRITE(kaneko16_layers_0_regs_w) AM_BASE_MEMBER(kaneko16_state, m_layers_0_regs) // Layers 0 Regs + AM_RANGE(0x680000, 0x68001f) AM_RAM_WRITE(kaneko16_layers_1_regs_w) AM_BASE_MEMBER(kaneko16_state, m_layers_1_regs) // Layers 1 Regs + AM_RANGE(0x700000, 0x70001f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_BASE_MEMBER(kaneko16_state, m_sprites_regs) // Sprites Regs + AM_RANGE(0x800000, 0x800001) AM_DEVREADWRITE8_MODERN("oki1", okim6295_device, read, write, 0x00ff) + AM_RANGE(0x880000, 0x880001) AM_DEVREADWRITE8_MODERN("oki2", okim6295_device, read, write, 0x00ff) + AM_RANGE(0x900000, 0x900015) AM_READWRITE(galpanib_calc_r,galpanib_calc_w) + AM_RANGE(0xa00000, 0xa00001) AM_READWRITE(watchdog_reset16_r, watchdog_reset16_w) // Watchdog + AM_RANGE(0xb00000, 0xb00001) AM_READ_PORT("P1") + AM_RANGE(0xb00002, 0xb00003) AM_READ_PORT("P2") + AM_RANGE(0xb00004, 0xb00005) AM_READ_PORT("SYSTEM") + AM_RANGE(0xb00006, 0xb00007) AM_READ_PORT("UNK") + AM_RANGE(0xb80000, 0xb80001) AM_WRITE(bloodwar_coin_lockout_w) // Coin Lockout + AM_RANGE(0xc00000, 0xc00001) AM_WRITE(kaneko16_display_enable) + AM_RANGE(0xd00000, 0xd00001) AM_READ(toybox_mcu_status_r) + AM_RANGE(0xe00000, 0xe00001) AM_DEVWRITE("oki1", bonkadv_oki_0_bank_w) + AM_RANGE(0xe80000, 0xe80001) AM_DEVWRITE("oki2", bonkadv_oki_1_bank_w) +ADDRESS_MAP_END + + +/*************************************************************************** + Great 1000 Miles Rally +***************************************************************************/ + + +static READ16_HANDLER( gtmr_wheel_r ) +{ + // check 'Controls' dip switch + switch (input_port_read(space->machine(), "DSW1") & 0x1000) + { + case 0x0000: // 'Both Sides' = 270deg Wheel + return (input_port_read(space->machine(), "WHEEL0")); + case 0x1000: // '1P Side' = 360' Wheel + return (input_port_read(space->machine(), "WHEEL1")); + default: + return (0); + } +} + +static WRITE16_DEVICE_HANDLER( gtmr_oki_0_bank_w ) +{ + if (ACCESSING_BITS_0_7) + { + okim6295_device *oki = downcast<okim6295_device *>(device); + oki->set_bank_base( 0x40000 * (data & 0xF) ); +// logerror("CPU #0 PC %06X : OKI0 bank %08X\n",cpu_get_pc(&space->device()),data); + } +} + +static WRITE16_DEVICE_HANDLER( gtmr_oki_1_bank_w ) +{ + if (ACCESSING_BITS_0_7) + { + okim6295_device *oki = downcast<okim6295_device *>(device); + oki->set_bank_base( 0x40000 * (data & 0x1) ); +// logerror("CPU #0 PC %06X : OKI1 bank %08X\n",cpu_get_pc(&space->device()),data); + } +} + +static ADDRESS_MAP_START( gtmr_map, AS_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0ffffd) AM_ROM // ROM + AM_RANGE(0x0ffffe, 0x0fffff) AM_READ(gtmr_wheel_r) // Wheel Value + + AM_RANGE(0x100000, 0x10ffff) AM_RAM // Work RAM + AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_mcu_ram) // Shared With MCU + + AM_RANGE(0x2a0000, 0x2a0001) AM_WRITE(toybox_mcu_com0_w) // To MCU ? + AM_RANGE(0x2b0000, 0x2b0001) AM_WRITE(toybox_mcu_com1_w) + AM_RANGE(0x2c0000, 0x2c0001) AM_WRITE(toybox_mcu_com2_w) + AM_RANGE(0x2d0000, 0x2d0001) AM_WRITE(toybox_mcu_com3_w) + + AM_RANGE(0x300000, 0x30ffff) AM_RAM_WRITE(paletteram16_xGGGGGRRRRRBBBBB_word_w) AM_BASE_GENERIC(paletteram) // Palette + AM_RANGE(0x310000, 0x327fff) AM_RAM // + AM_RANGE(0x400000, 0x401fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) // Sprites + + AM_RANGE(0x500000, 0x500fff) AM_RAM_WRITE(kaneko16_vram_1_w) AM_BASE_MEMBER(kaneko16_state, m_vram[1]) // Layers 0 + AM_RANGE(0x501000, 0x501fff) AM_RAM_WRITE(kaneko16_vram_0_w) AM_BASE_MEMBER(kaneko16_state, m_vram[0]) // + AM_RANGE(0x502000, 0x502fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[1]) // + AM_RANGE(0x503000, 0x503fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[0]) // + + AM_RANGE(0x580000, 0x580fff) AM_RAM_WRITE(kaneko16_vram_3_w) AM_BASE_MEMBER(kaneko16_state, m_vram[3]) // Layers 1 + AM_RANGE(0x581000, 0x581fff) AM_RAM_WRITE(kaneko16_vram_2_w) AM_BASE_MEMBER(kaneko16_state, m_vram[2]) // + AM_RANGE(0x582000, 0x582fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[3]) // + AM_RANGE(0x583000, 0x583fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[2]) // + + AM_RANGE(0x600000, 0x60000f) AM_RAM_WRITE(kaneko16_layers_0_regs_w) AM_BASE_MEMBER(kaneko16_state, m_layers_0_regs) // Layers 0 Regs + AM_RANGE(0x680000, 0x68000f) AM_RAM_WRITE(kaneko16_layers_1_regs_w) AM_BASE_MEMBER(kaneko16_state, m_layers_1_regs) // Layers 1 Regs + + AM_RANGE(0x700000, 0x70001f) AM_READWRITE(kaneko16_sprites_regs_r, kaneko16_sprites_regs_w) AM_BASE_MEMBER(kaneko16_state, m_sprites_regs) // Sprites Regs + + AM_RANGE(0x800000, 0x800001) AM_DEVREADWRITE8_MODERN("oki1", okim6295_device, read, write, 0x00ff) // Samples + AM_RANGE(0x880000, 0x880001) AM_DEVREADWRITE8_MODERN("oki2", okim6295_device, read, write, 0x00ff) + + AM_RANGE(0x900014, 0x900015) AM_READ(kaneko16_rnd_r) // Random Number ? + AM_RANGE(0xa00000, 0xa00001) AM_READWRITE(watchdog_reset16_r, watchdog_reset16_w) // Watchdog + + AM_RANGE(0xb00000, 0xb00001) AM_READ_PORT("P1") + AM_RANGE(0xb00002, 0xb00003) AM_READ_PORT("P2") + AM_RANGE(0xb00004, 0xb00005) AM_READ_PORT("SYSTEM") + AM_RANGE(0xb00006, 0xb00007) AM_READ_PORT("UNK") + AM_RANGE(0xb80000, 0xb80001) AM_WRITE(kaneko16_coin_lockout_w) // Coin Lockout + AM_RANGE(0xc00000, 0xc00001) AM_WRITE(kaneko16_display_enable) // might do more than that + + AM_RANGE(0xd00000, 0xd00001) AM_READ(toybox_mcu_status_r) + + AM_RANGE(0xe00000, 0xe00001) AM_DEVWRITE("oki1", gtmr_oki_0_bank_w) // Samples Bankswitching + AM_RANGE(0xe80000, 0xe80001) AM_DEVWRITE("oki2", gtmr_oki_1_bank_w) +ADDRESS_MAP_END + +/*************************************************************************** + Great 1000 Miles Rally 2 +***************************************************************************/ + + +static READ16_HANDLER( gtmr2_wheel_r ) +{ + switch (input_port_read(space->machine(), "DSW1") & 0x1800) + { + case 0x0000: // 270' A. Wheel + return (input_port_read(space->machine(), "WHEEL0")); + case 0x1000: // 270' D. Wheel + return (input_port_read(space->machine(), "WHEEL1") << 8); + case 0x0800: // 360' Wheel + return (input_port_read(space->machine(), "WHEEL2") << 8); + default: + logerror("gtmr2_wheel_r : read at %06x with joystick\n", cpu_get_pc(&space->device())); + return (~0); + } +} + +static READ16_HANDLER( gtmr2_IN1_r ) +{ + return (input_port_read(space->machine(), "P2") & (input_port_read(space->machine(), "FAKE") | ~0x7100)); +} + +static ADDRESS_MAP_START( gtmr2_map, AS_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0ffffd) AM_ROM // ROM + AM_RANGE(0x0ffffe, 0x0fffff) AM_READ(gtmr2_wheel_r) // Wheel Value + + AM_RANGE(0x100000, 0x10ffff) AM_RAM // Work RAM + AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_mcu_ram) // Shared With MCU + + AM_RANGE(0x2a0000, 0x2a0001) AM_WRITE(toybox_mcu_com0_w) // To MCU ? + AM_RANGE(0x2b0000, 0x2b0001) AM_WRITE(toybox_mcu_com1_w) + AM_RANGE(0x2c0000, 0x2c0001) AM_WRITE(toybox_mcu_com2_w) + AM_RANGE(0x2d0000, 0x2d0001) AM_WRITE(toybox_mcu_com3_w) + + AM_RANGE(0x300000, 0x30ffff) AM_RAM_WRITE(paletteram16_xGGGGGRRRRRBBBBB_word_w) AM_BASE_GENERIC(paletteram) // Palette + AM_RANGE(0x310000, 0x327fff) AM_RAM // + AM_RANGE(0x400000, 0x401fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) // Sprites + + AM_RANGE(0x500000, 0x500fff) AM_RAM_WRITE(kaneko16_vram_1_w) AM_BASE_MEMBER(kaneko16_state, m_vram[1]) // Layers 0 + AM_RANGE(0x501000, 0x501fff) AM_RAM_WRITE(kaneko16_vram_0_w) AM_BASE_MEMBER(kaneko16_state, m_vram[0]) // + AM_RANGE(0x502000, 0x502fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[1]) // + AM_RANGE(0x503000, 0x503fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[0]) // + + AM_RANGE(0x580000, 0x580fff) AM_RAM_WRITE(kaneko16_vram_3_w) AM_BASE_MEMBER(kaneko16_state, m_vram[3]) // Layers 1 + AM_RANGE(0x581000, 0x581fff) AM_RAM_WRITE(kaneko16_vram_2_w) AM_BASE_MEMBER(kaneko16_state, m_vram[2]) // + AM_RANGE(0x582000, 0x582fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[3]) // + AM_RANGE(0x583000, 0x583fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[2]) // + AM_RANGE(0x600000, 0x60000f) AM_RAM_WRITE(kaneko16_layers_0_regs_w) AM_BASE_MEMBER(kaneko16_state, m_layers_0_regs) // Layers 0 Regs + + AM_RANGE(0x680000, 0x68000f) AM_RAM_WRITE(kaneko16_layers_1_regs_w) AM_BASE_MEMBER(kaneko16_state, m_layers_1_regs) // Layers 1 Regs + AM_RANGE(0x700000, 0x70001f) AM_READWRITE(kaneko16_sprites_regs_r, kaneko16_sprites_regs_w) AM_BASE_MEMBER(kaneko16_state, m_sprites_regs) // Sprites Regs + AM_RANGE(0x800000, 0x800001) AM_DEVREADWRITE8_MODERN("oki1", okim6295_device, read, write, 0x00ff) // Samples + AM_RANGE(0x880000, 0x880001) AM_DEVREADWRITE8_MODERN("oki2", okim6295_device, read, write, 0x00ff) + + AM_RANGE(0x900014, 0x900015) AM_READ(kaneko16_rnd_r) // Random Number ? + AM_RANGE(0xa00000, 0xa00001) AM_READWRITE(watchdog_reset16_r, watchdog_reset16_w) // Watchdog + + AM_RANGE(0xb00000, 0xb00001) AM_READ_PORT("P1") +// AM_RANGE(0xb00002, 0xb00003) AM_READ_PORT("P2") + AM_RANGE(0xb00002, 0xb00003) AM_READ(gtmr2_IN1_r) + AM_RANGE(0xb00004, 0xb00005) AM_READ_PORT("SYSTEM") + AM_RANGE(0xb00006, 0xb00007) AM_READ_PORT("EXTRA") + AM_RANGE(0xb80000, 0xb80001) AM_WRITE(kaneko16_coin_lockout_w) // Coin Lockout + AM_RANGE(0xc00000, 0xc00001) AM_WRITE(kaneko16_display_enable) // might do more than that + + AM_RANGE(0xd00000, 0xd00001) AM_READ(toybox_mcu_status_r) + + AM_RANGE(0xe00000, 0xe00001) AM_DEVWRITE("oki1", gtmr_oki_0_bank_w) // Samples Bankswitching + AM_RANGE(0xe80000, 0xe80001) AM_DEVWRITE("oki2", gtmr_oki_1_bank_w) +ADDRESS_MAP_END + +/*************************************************************************** + Magical Crystal +***************************************************************************/ + +static ADDRESS_MAP_START( mgcrystl, AS_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_ROM // ROM + AM_RANGE(0x300000, 0x30ffff) AM_RAM // Work RAM + AM_RANGE(0x400000, 0x40001f) AM_DEVREADWRITE("ay1", kaneko16_YM2149_r, kaneko16_YM2149_w) // Sound + AM_RANGE(0x400200, 0x40021f) AM_DEVREADWRITE("ay2", kaneko16_YM2149_r, kaneko16_YM2149_w) + AM_RANGE(0x400400, 0x400401) AM_DEVREADWRITE8_MODERN("oki", okim6295_device, read, write, 0x00ff) + AM_RANGE(0x500000, 0x500fff) AM_RAM_WRITE(paletteram16_xGGGGGRRRRRBBBBB_word_w) AM_BASE_GENERIC(paletteram) // Palette + AM_RANGE(0x600000, 0x600fff) AM_RAM_WRITE(kaneko16_vram_1_w) AM_BASE_MEMBER(kaneko16_state, m_vram[1]) // Layers 0 + AM_RANGE(0x601000, 0x601fff) AM_RAM_WRITE(kaneko16_vram_0_w) AM_BASE_MEMBER(kaneko16_state, m_vram[0]) // + AM_RANGE(0x602000, 0x602fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[1]) // + AM_RANGE(0x603000, 0x603fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[0]) // + AM_RANGE(0x680000, 0x680fff) AM_RAM_WRITE(kaneko16_vram_3_w) AM_BASE_MEMBER(kaneko16_state, m_vram[3]) // Layers 1 + AM_RANGE(0x681000, 0x681fff) AM_RAM_WRITE(kaneko16_vram_2_w) AM_BASE_MEMBER(kaneko16_state, m_vram[2]) // + AM_RANGE(0x682000, 0x682fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[3]) // + AM_RANGE(0x683000, 0x683fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[2]) // + AM_RANGE(0x700000, 0x701fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) // Sprites + AM_RANGE(0x800000, 0x80001f) AM_RAM_WRITE(kaneko16_layers_0_regs_w) AM_BASE_MEMBER(kaneko16_state, m_layers_0_regs) // Layers 0 Regs + AM_RANGE(0x900000, 0x90001f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_BASE_MEMBER(kaneko16_state, m_sprites_regs) // Sprites Regs + AM_RANGE(0xb00000, 0xb0001f) AM_RAM_WRITE(kaneko16_layers_1_regs_w) AM_BASE_MEMBER(kaneko16_state, m_layers_1_regs) // Layers 1 Regs + AM_RANGE(0xa00000, 0xa00001) AM_READ(watchdog_reset16_r) // Watchdog + AM_RANGE(0xc00000, 0xc00001) AM_READ_PORT("DSW_P1") + AM_RANGE(0xc00002, 0xc00003) AM_READ_PORT("P2") + AM_RANGE(0xc00004, 0xc00005) AM_READ_PORT("SYSTEM") + AM_RANGE(0xd00000, 0xd00001) AM_WRITE(kaneko16_eeprom_w) // EEPROM +ADDRESS_MAP_END + + + +/*************************************************************************** + Shogun Warriors +***************************************************************************/ + +static void kaneko16_common_oki_bank_w( running_machine& machine, const char *bankname, const char* tag, int bank, size_t fixedsize, size_t bankedsize ) +{ + UINT32 bankaddr; + UINT8* samples = machine.region(tag)->base(); + size_t length = machine.region(tag)->bytes(); + + bankaddr = fixedsize + (bankedsize * bank); + + if (bankaddr <= (length-bankedsize)) + { + memory_set_bankptr(machine, bankname, samples + bankaddr); + } +} + +static WRITE16_HANDLER( shogwarr_oki_bank_w ) +{ + if (ACCESSING_BITS_0_7) + { + kaneko16_common_oki_bank_w(space->machine(), "bank10", "oki1", (data >> 4) & 0xf, 0x30000, 0x10000); + kaneko16_common_oki_bank_w(space->machine(), "bank11", "oki2", (data & 0xf) , 0x00000, 0x40000); + } +} + +static WRITE16_HANDLER( brapboys_oki_bank_w ) +{ + if (ACCESSING_BITS_0_7) + { + kaneko16_common_oki_bank_w(space->machine(), "bank10", "oki1", (data >> 4) & 0xf, 0x30000, 0x10000); + kaneko16_common_oki_bank_w(space->machine(), "bank11", "oki2", (data & 0xf) , 0x20000, 0x20000); + } +} + + +static ADDRESS_MAP_START( shogwarr, AS_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x03ffff) AM_ROM // ROM + AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_mainram) // Work RAM + AM_RANGE(0x200000, 0x20ffff) AM_RAM_WRITE(calc3_mcu_ram_w) AM_BASE_MEMBER(kaneko16_state, m_mcu_ram) // Shared With MCU + AM_RANGE(0x280000, 0x280001) AM_WRITE(calc3_mcu_com0_w) + AM_RANGE(0x290000, 0x290001) AM_WRITE(calc3_mcu_com1_w) + AM_RANGE(0x2b0000, 0x2b0001) AM_WRITE(calc3_mcu_com2_w) + //AM_RANGE(0x2c0000, 0x2c0001) AM_WRITE(calc3_run) // guess, might be irqack + AM_RANGE(0x2d0000, 0x2d0001) AM_WRITE(calc3_mcu_com3_w) + AM_RANGE(0x380000, 0x380fff) AM_RAM_WRITE(paletteram16_xGGGGGRRRRRBBBBB_word_w) AM_BASE_GENERIC(paletteram) // Palette + AM_RANGE(0x400000, 0x400001) AM_DEVREADWRITE8_MODERN("oki1", okim6295_device, read, write, 0x00ff) // Samples + AM_RANGE(0x480000, 0x480001) AM_DEVREADWRITE8_MODERN("oki2", okim6295_device, read, write, 0x00ff) + AM_RANGE(0x580000, 0x581fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) // Sprites + AM_RANGE(0x600000, 0x600fff) AM_RAM_WRITE(kaneko16_vram_1_w) AM_BASE_MEMBER(kaneko16_state, m_vram[1]) // Layers 0 + AM_RANGE(0x601000, 0x601fff) AM_RAM_WRITE(kaneko16_vram_0_w) AM_BASE_MEMBER(kaneko16_state, m_vram[0]) + AM_RANGE(0x602000, 0x602fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[1]) + AM_RANGE(0x603000, 0x603fff) AM_RAM AM_BASE_MEMBER(kaneko16_state, m_vscroll[0]) + AM_RANGE(0x800000, 0x80000f) AM_RAM_WRITE(kaneko16_layers_0_regs_w) AM_BASE_MEMBER(kaneko16_state, m_layers_0_regs) // Layers 0 Regs + AM_RANGE(0x900000, 0x90001f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_BASE_MEMBER(kaneko16_state, m_sprites_regs) // Sprites Regs + AM_RANGE(0xa00000, 0xa0007f) AM_READWRITE(bloodwar_calc_r, bloodwar_calc_w) + AM_RANGE(0xa80000, 0xa80001) AM_READWRITE(watchdog_reset16_r, watchdog_reset16_w) // Watchdog + AM_RANGE(0xb80000, 0xb80001) AM_READ_PORT("P1") + AM_RANGE(0xb80002, 0xb80003) AM_READ_PORT("P2") + AM_RANGE(0xb80004, 0xb80005) AM_READ_PORT("SYSTEM") + AM_RANGE(0xb80006, 0xb80007) AM_READ_PORT("UNK") + AM_RANGE(0xd00000, 0xd00001) AM_NOP // ? (bit 0) + AM_RANGE(0xe00000, 0xe00001) AM_WRITE(shogwarr_oki_bank_w) // Samples Bankswitching +ADDRESS_MAP_END + + +/*************************************************************************** + + + Memory Maps - Sound CPU + + +***************************************************************************/ + +/*************************************************************************** + Blaze On +***************************************************************************/ + +static ADDRESS_MAP_START( blazeon_soundmem, AS_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_ROM // ROM + AM_RANGE(0xc000, 0xdfff) AM_RAM // RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( blazeon_soundport, AS_IO, 8 ) + ADDRESS_MAP_GLOBAL_MASK(0xff) + AM_RANGE(0x02, 0x03) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w) + AM_RANGE(0x06, 0x06) AM_READ(soundlatch_r) +ADDRESS_MAP_END + + +/*************************************************************************** + + + Input Ports + + +***************************************************************************/ + +/*************************************************************************** + Bakuretsu Breaker +***************************************************************************/ + +static INPUT_PORTS_START( bakubrkr ) + PORT_START("P1") /* e00000.w */ + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE_DIPLOC( 0x0002, IP_ACTIVE_LOW, "SW1:2" ) + /* All other game settings done through the test mode */ + PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0004, "SW1:3" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0008, "SW1:4" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0010, "SW1:5" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0020, "SW1:6" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0040, "SW1:7" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0080, "SW1:8" ) /* Listed as "Unused" */ + + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("P2") /* e00002.b */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("SYSTEM") /* e00004.b */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) + PORT_SERVICE_NO_TOGGLE( 0x1000, IP_ACTIVE_LOW ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT ) // pause + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("UNK") /* Seems unused ! - e00006.b */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START( "EEPROMOUT" ) + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_clock_line) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, write_bit) +INPUT_PORTS_END + + +/*************************************************************************** + The Berlin Wall (set 1) +***************************************************************************/ + +static INPUT_PORTS_START( berlwall ) + PORT_START("P1") /* 680000.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("P2") /* 680002.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("SYSTEM") /* 680000.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) + PORT_SERVICE_NO_TOGGLE( 0x1000, IP_ACTIVE_LOW ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("UNK") /* ? - 680006.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW1") /*$200018.b <- ! $80001d.b */ + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW1:2" ) /* Listed as "Unused" */ + PORT_DIPNAME( 0x1c, 0x1c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:3,4,5") + PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x1c, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x18, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x14, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 1C_4C ) ) + PORT_DIPNAME( 0xe0, 0xe0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:6,7,8") + PORT_DIPSETTING( 0x60, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0xe0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0xa0, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x80, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) ) + + PORT_START("DSW2") /* $200019.b <- $80001f.b */ + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2") + PORT_DIPSETTING( 0x02, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x03, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:3,4") // 1p lives at 202982.b + PORT_DIPSETTING( 0x08, "2" ) + PORT_DIPSETTING( 0x0c, "3" ) + PORT_DIPSETTING( 0x04, "5" ) + PORT_DIPSETTING( 0x00, "7" ) + PORT_DIPNAME( 0x30, 0x30, "Country" ) PORT_DIPLOCATION("SW2:5,6") + PORT_DIPSETTING( 0x30, "England" ) + PORT_DIPSETTING( 0x20, "Italy" ) + PORT_DIPSETTING( 0x10, "Germany" ) + PORT_DIPSETTING( 0x00, "Freeze Screen" ) // Not documented + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:7") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_SERVICE_DIPLOC(0x80, IP_ACTIVE_LOW, "SW2:8" ) +INPUT_PORTS_END + + +/*************************************************************************** + The Berlin Wall (set 2) +***************************************************************************/ + +// Same as berlwall, but for a different lives setting + +static INPUT_PORTS_START( berlwalt ) + PORT_INCLUDE(berlwall) + + PORT_MODIFY("DSW2") + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:3,4") + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x0c, "2" ) + PORT_DIPSETTING( 0x08, "3" ) + PORT_DIPSETTING( 0x04, "5" ) +INPUT_PORTS_END + + +/*************************************************************************** + Blaze On +***************************************************************************/ + +static INPUT_PORTS_START( blazeon ) + PORT_START("DSW2_P1") /* c00000.w */ + PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2") + PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:3,4") + PORT_DIPSETTING( 0x0000, "2" ) + PORT_DIPSETTING( 0x000c, "3" ) + PORT_DIPSETTING( 0x0008, "4" ) + PORT_DIPSETTING( 0x0004, "5" ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:5") + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) + PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0020, "SW2:6" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0040, "SW2:7" ) /* Listed as "Unused" */ + PORT_SERVICE_DIPLOC( 0x0080, IP_ACTIVE_LOW, "SW2:8" ) + + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) + + PORT_START("DSW1_P2") /* c00002.w */ + PORT_DIPNAME( 0x000f, 0x000f, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2,3,4") + PORT_DIPSETTING( 0x0007, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0005, "6 Coins/3 Credits" ) + PORT_DIPSETTING( 0x0009, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 4C_3C ) ) + PORT_DIPSETTING( 0x000f, DEF_STR( 1C_1C ) ) +// PORT_DIPSETTING( 0x0000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0003, "5 Coins/6 Credits" ) + PORT_DIPSETTING( 0x0002, DEF_STR( 4C_5C ) ) + PORT_DIPSETTING( 0x0006, DEF_STR( 2C_3C ) ) +// PORT_DIPSETTING( 0x0001, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x000e, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x000d, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x000c, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x000b, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x000a, DEF_STR( 1C_6C ) ) + + PORT_DIPNAME( 0x00f0, 0x00f0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:5,6,7,8") + PORT_DIPSETTING( 0x0070, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0050, "6 Coins/3 Credits" ) + PORT_DIPSETTING( 0x0090, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( 4C_3C ) ) + PORT_DIPSETTING( 0x00f0, DEF_STR( 1C_1C ) ) +// PORT_DIPSETTING( 0x0000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0030, "5 Coins/6 Credits" ) + PORT_DIPSETTING( 0x0020, DEF_STR( 4C_5C ) ) + PORT_DIPSETTING( 0x0060, DEF_STR( 2C_3C ) ) +// PORT_DIPSETTING( 0x0010, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x00e0, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x00d0, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x00b0, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x00a0, DEF_STR( 1C_6C ) ) + + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) + + PORT_START("UNK") /* ? - c00004.w */ + PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused? + + PORT_START("SYSTEM") /* c00006.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_SERVICE_NO_TOGGLE( 0x2000, IP_ACTIVE_LOW ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_SERVICE1 ) +INPUT_PORTS_END + +/*************************************************************************** + Blood Warrior +***************************************************************************/ + +static INPUT_PORTS_START( bloodwar ) + PORT_START("P1") /* b0000.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) + + PORT_START("P2") /* b0002.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("SYSTEM") /* b0004.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) + PORT_SERVICE_NO_TOGGLE( 0x1000, IP_ACTIVE_LOW ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_SERVICE2 ) // tested + + PORT_START("EXTRA") /* ? - b0006.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) // tested + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) // tested + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW1") /* from the MCU - $10497e.b <- $208000.b */ + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( On ) ) + PORT_SERVICE_DIPLOC( 0x0200, IP_ACTIVE_LOW, "SW1:2" ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:3") + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x3800, 0x3800, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:4,5,6") + PORT_DIPSETTING( 0x3800, "1 Easy" ) + PORT_DIPSETTING( 0x3000, "2" ) + PORT_DIPSETTING( 0x2800, "3" ) + PORT_DIPSETTING( 0x2000, "4" ) + PORT_DIPSETTING( 0x1800, "5" ) + PORT_DIPSETTING( 0x1000, "6" ) + PORT_DIPSETTING( 0x0800, "7" ) + PORT_DIPSETTING( 0x0000, "8 Hard" ) + PORT_DIPNAME( 0x4000, 0x4000, "Can Join During Game" ) PORT_DIPLOCATION("SW1:7") + PORT_DIPSETTING( 0x0000, DEF_STR( No ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x8000, 0x8000, "Start 2 Credits/Continue 1 Credit" ) PORT_DIPLOCATION("SW1:8") + PORT_DIPSETTING( 0x8000, DEF_STR( No ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) ) +INPUT_PORTS_END + +/*************************************************************************** + Bonk's Adventure +***************************************************************************/ + +static INPUT_PORTS_START( bonkadv ) + PORT_START("P1") /* b0000.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) + + PORT_START("P2") /* b0002.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) + + PORT_START("SYSTEM") /* b0004.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) + PORT_SERVICE_NO_TOGGLE( 0x1000, IP_ACTIVE_LOW ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_SERVICE2 ) + + PORT_START("UNK") /* ? - b0006.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // tested + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // tested + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW1") /* from the MCU - $10019e.b <- $200200.b */ + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Free_Play ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( On ) ) + PORT_DIPNAME( 0x0800, 0x0800, "Ticket dispenser" ) /* "Reserved" for Japan/Europe */ + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x0000, "Title Level Display" ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, "Reserved" ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x4000, "Reserved" ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x8000, IP_ACTIVE_LOW ) +INPUT_PORTS_END + + +/*************************************************************************** + Great 1000 Miles Rally +***************************************************************************/ + +static INPUT_PORTS_START( gtmr ) + PORT_START("P1") /* b0000.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) // swapped for consistency: + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) // button1 is usually accel. + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("P2") /* b0002.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) // swapped for consistency: + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // button1 is usually accel. + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("SYSTEM") /* b0004.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) + PORT_SERVICE_NO_TOGGLE( 0x1000, IP_ACTIVE_LOW ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("UNK") /* Seems unused ! - b0006.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW1") /* from the MCU - 101265.b <- 206000.b */ + PORT_SERVICE_DIPLOC( 0x0100, IP_ACTIVE_LOW, "SW1:1" ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:2") + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:3") + PORT_DIPSETTING( 0x0400, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Controller ) ) PORT_DIPLOCATION("SW1:4") + PORT_DIPSETTING( 0x0800, DEF_STR( Joystick ) ) + PORT_DIPSETTING( 0x0000, "Wheel" ) + PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Controls ) ) PORT_DIPLOCATION("SW1:5") + PORT_DIPSETTING( 0x1000, "1P Side" ) PORT_CONDITION("DSW1",0x0800,PORTCOND_NOTEQUALS,0x00) + PORT_DIPSETTING( 0x0000, "Both Sides" ) PORT_CONDITION("DSW1",0x0800,PORTCOND_NOTEQUALS,0x00) + PORT_DIPSETTING( 0x1000, "360 degree wheel" ) PORT_CONDITION("DSW1",0x0800,PORTCOND_EQUALS,0x00) + PORT_DIPSETTING( 0x0000, "270 degree wheel" ) PORT_CONDITION("DSW1",0x0800,PORTCOND_EQUALS,0x00) + PORT_DIPNAME( 0x2000, 0x2000, "Use Brake" ) PORT_DIPLOCATION("SW1:6") /* Valid only when joystick is used */ + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( On ) ) + PORT_DIPNAME( 0xc000, 0xc000, "National Anthem & Flag" ) PORT_DIPLOCATION("SW1:7,8") + PORT_DIPSETTING( 0xc000, "Use Memory" ) + PORT_DIPSETTING( 0x8000, "Anthem Only" ) + PORT_DIPSETTING( 0x4000, "Flag Only" ) + PORT_DIPSETTING( 0x0000, DEF_STR( None ) ) + + PORT_START("WHEEL0") /* Wheel (270deg) - 100015.b <- ffffe.b */ + PORT_BIT ( 0x00ff, 0x0080, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(25) + + PORT_START("WHEEL1") /* Wheel (360deg) */ + PORT_BIT ( 0x00ff, 0x0000, IPT_DIAL ) PORT_SENSITIVITY(70) PORT_KEYDELTA(25) PORT_PLAYER(1) +INPUT_PORTS_END + + +/*************************************************************************** + Great 1000 Miles Rally 2 +***************************************************************************/ + +static INPUT_PORTS_START( gtmr2 ) + PORT_START("P1") /* 100004.w <- b00000.w (cpl) */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) // swapped for consistency: + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) // button1 is usually accel. + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("P2") /* 10000c.w <- b00002.w (cpl) - for "test mode" only */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) // swapped for consistency: + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // button1 is usually accel. + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("SYSTEM") /* 100014.w <- b00004.w (cpl) */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 ) // only in "test mode" + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) + PORT_SERVICE_NO_TOGGLE( 0x1000, IP_ACTIVE_LOW ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("EXTRA") /* 100017.w <- b00006.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("IN 3-6") // Code at 0x002236 - Centers 270D wheel ? + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW1") /* from the MCU - 1016f7.b <- 206000.b */ + PORT_DIPNAME( 0x0700, 0x0700, "Linked Operation Board Number" ) PORT_DIPLOCATION("SW1:6,7,8") + PORT_DIPSETTING( 0x0700, "No Communication" ) + PORT_DIPSETTING( 0x0600, "Board #1" ) + PORT_DIPSETTING( 0x0500, "Board #2" ) + PORT_DIPSETTING( 0x0400, "Board #3" ) + PORT_DIPSETTING( 0x0300, "Board #4" ) + /* 0x0000 to 0x0200 : "Machine 4" + PORT_DIPSETTING( 0x0200, "Machine 4 (0x0200)" ) + PORT_DIPSETTING( 0x0100, "Machine 4 (0x0100)" ) + PORT_DIPSETTING( 0x0000, "Machine 4 (0x0000)" ) + */ + PORT_DIPNAME( 0x1800, 0x1800, DEF_STR( Controls ) ) PORT_DIPLOCATION("SW1:4,5") + PORT_DIPSETTING( 0x1800, DEF_STR( Joystick ) ) + PORT_DIPSETTING( 0x0800, "Wheel (360)" ) // Not working correctly in race } + PORT_DIPSETTING( 0x1000, "Wheel (270D)" ) // Not working correctly ! } seems to work ok to me! (minwah) + PORT_DIPSETTING( 0x0000, "Wheel (270A)" ) // Not working correctly in race } + PORT_DIPNAME( 0x2000, 0x2000, "Optional Mode Of Pedal Function" ) PORT_DIPLOCATION("SW1:3") + PORT_DIPSETTING( 0x2000, "Microswitch" ) // "This mode also corresponds to the two buttons used with joystick." + PORT_DIPSETTING( 0x0000, "Potentiometer" ) // Not implemented yet + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:2") + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE_DIPLOC( 0x8000, IP_ACTIVE_LOW, "SW1:1" ) + + PORT_START("WHEEL0") /* Wheel (270A) - 100019.b <- fffff.b */ + PORT_BIT ( 0x00ff, 0x0080, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(1) + + PORT_START("WHEEL1") /* Wheel (270D) - 100019.b <- ffffe.b */ + PORT_BIT ( 0x00ff, 0x0080, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(1) + + PORT_START("WHEEL2") /* Wheel (360) - 100019.b <- ffffe.b */ + PORT_BIT( 0x00ff, 0x0000, IPT_DIAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(1) PORT_CODE_DEC(KEYCODE_LEFT) PORT_CODE_INC(KEYCODE_RIGHT) + + PORT_START("FAKE") /* Fake P2 - To be pressed during boot sequence - Code at 0x000c9e */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("IN 1-0") PORT_CODE(KEYCODE_H) // "sound test" + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("IN 1-4") PORT_CODE(KEYCODE_J) // "view tiles" + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("IN 1-5") PORT_CODE(KEYCODE_K) // "view memory" + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_NAME("IN 1-6") PORT_CODE(KEYCODE_L) // "view sprites ?" + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + + +/*************************************************************************** + Magical Crystal +***************************************************************************/ + +static INPUT_PORTS_START( mgcrystl ) + PORT_START("DSW_P1") /* c00000.w */ + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE_DIPLOC( 0x0002, IP_ACTIVE_LOW, "SW1:2" ) + /* All other game settings done through the test mode */ + PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0004, "SW1:3" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0008, "SW1:4" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0010, "SW1:5" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0020, "SW1:6" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0040, "SW1:7" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0080, "SW1:8" ) /* Listed as "Unused" */ + + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("P2") /* c00002.b */ + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("SYSTEM") /* c00004.b */ + PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) + PORT_SERVICE_NO_TOGGLE( 0x1000, IP_ACTIVE_LOW ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START( "EEPROMOUT" ) + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_clock_line) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, write_bit) +INPUT_PORTS_END + + + +/*************************************************************************** + Shogun Warriors +***************************************************************************/ + +static INPUT_PORTS_START( shogwarr ) + PORT_START("P1") /* b80000.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_COIN1 ) + + PORT_START("P2") /* b80002.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_COIN2 ) + + PORT_START("SYSTEM") /* b80004.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("UNK") /* ? - b80006.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW1") /* from the MCU - 102e15.b <- 200059.b */ + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_SERVICE_DIPLOC(0x02, IP_ACTIVE_LOW, "SW1:2" ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:3") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x38, 0x38, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:4,5,6") + PORT_DIPSETTING( 0x38, "1 Easy" ) + PORT_DIPSETTING( 0x30, "2" ) + PORT_DIPSETTING( 0x28, "3" ) + PORT_DIPSETTING( 0x20, "4 Normal" ) + PORT_DIPSETTING( 0x18, "5" ) + PORT_DIPSETTING( 0x10, "6" ) + PORT_DIPSETTING( 0x08, "7" ) + PORT_DIPSETTING( 0x00, "8 Hard" ) + PORT_DIPNAME( 0x40, 0x40, "Can Join During Game" ) PORT_DIPLOCATION("SW1:7") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) // 2 credits winner vs computer + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) // 1 credit game over + PORT_DIPNAME( 0x80, 0x80, "Continue Coin" ) PORT_DIPLOCATION("SW1:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START( "EEPROMOUT" ) + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_clock_line) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, write_bit) +INPUT_PORTS_END + + +static INPUT_PORTS_START( brapboys ) + PORT_START("P1") /* b80000.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_COIN1 ) + + PORT_START("P2") /* b80002.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_COIN2 ) + + PORT_START("SYSTEM") /* b80004.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_START3 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_COIN3 ) + + PORT_START("UNK") /* ? - b80006.w */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW1") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_SERVICE_DIPLOC(0x02, IP_ACTIVE_LOW, "SW1:2" ) + PORT_DIPNAME( 0x04, 0x04, "Switch Test" ) PORT_DIPLOCATION("SW1:3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPUNUSED_DIPLOC(0x08, 0x08, "SW1:4" ) + PORT_DIPNAME( 0x10, 0x10, "Coin Slots" ) PORT_DIPLOCATION("SW1:5") + PORT_DIPSETTING( 0x10, "Separate Coins" ) + PORT_DIPSETTING( 0x00, "Shared Coins" ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Players ) ) PORT_DIPLOCATION("SW1:6") + PORT_DIPSETTING( 0x20, "3" ) + PORT_DIPSETTING( 0x00, "2" ) + PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:7,8") + PORT_DIPSETTING( 0x80, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Very_Hard) ) + +/***************************************************** +Difficulty Lives Bonus Players Play Level + Easy 3 every 1000 / 2000 Level 2 + Normal 2 every 2000 / 3000 Level 3 + Hard 2 every 3000 / 4000 Level 4 + Very Hard 1 --- NONE --- Level 6 +******************************************************/ + + PORT_START( "EEPROMOUT" ) + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_clock_line) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, write_bit) +INPUT_PORTS_END + + +/*************************************************************************** + + + Graphics Layouts + + +***************************************************************************/ + + +/* + 16x16x4 made of 4 8x8x4 blocks arrenged like: 01 + (nibbles are swapped for tiles, not for sprites) 23 +*/ +static const gfx_layout layout_16x16x4 = +{ + 16,16, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { STEP8(8*8*4*0,4), STEP8(8*8*4*1,4) }, + { STEP8(8*8*4*0,8*4), STEP8(8*8*4*2,8*4) }, + 16*16*4 +}; + +/* + 16x16x8 made of 4 8x8x8 blocks arrenged like: 01 + 23 +*/ +static const gfx_layout layout_16x16x8 = +{ + 16,16, + RGN_FRAC(1,1), + 8, + { STEP8(0,1) }, + { STEP8(0,8), STEP8(8*8*8*1,8) }, + { STEP8(0,8*8), STEP8(8*8*8*2,8*8) }, + 16*16*8 +}; + +static GFXDECODE_START( 1x4bit_1x4bit ) + GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x4, 0, 0x40 ) // [0] Sprites + GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x4, 0x40 * 16, 0x40 ) // [1] Layers +GFXDECODE_END +static GFXDECODE_START( 1x4bit_2x4bit ) + GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x4, 0, 0x40 ) // [0] Sprites + GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x4, 0x40 * 16, 0x40 ) // [1] Layers + GFXDECODE_ENTRY( "gfx3", 0, layout_16x16x4, 0x40 * 16, 0x40 ) // [2] Layers +GFXDECODE_END +static GFXDECODE_START( 1x8bit_2x4bit ) + GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x8, 0x40 * 256, 0x40 ) // [0] Sprites + GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x4, 0, 0x40 ) // [1] Layers + GFXDECODE_ENTRY( "gfx3", 0, layout_16x16x4, 0, 0x40 ) // [2] Layers +GFXDECODE_END + + + +/*************************************************************************** + + + Machine Drivers + + +***************************************************************************/ + +#define KANEKO16_INTERRUPTS_NUM 3 +static INTERRUPT_GEN( kaneko16_interrupt ) +{ + switch ( cpu_getiloops(device) ) + { + case 2: device_set_input_line(device, 3, HOLD_LINE); break; + case 1: device_set_input_line(device, 4, HOLD_LINE); break; + case 0: device_set_input_line(device, 5, HOLD_LINE); break; + } +} + +static const ay8910_interface ay8910_intf_dsw = +{ + AY8910_LEGACY_OUTPUT, + AY8910_DEFAULT_LOADS, + DEVCB_INPUT_PORT("DSW1"), + DEVCB_INPUT_PORT("DSW2"), + DEVCB_NULL, + DEVCB_NULL, +}; + +static WRITE8_DEVICE_HANDLER( kaneko16_eeprom_reset_w ) +{ + // FIXME: the device line cannot be directly put in the interface due to inverse value! + // we might want to define a "reversed" set_cs_line handler + eeprom_device *eeprom = device->machine().device<eeprom_device>("eeprom"); + // reset line asserted: reset. + eeprom->set_cs_line((data & 0x01) ? CLEAR_LINE : ASSERT_LINE ); +} + +static const ay8910_interface ay8910_intf_eeprom = +{ + AY8910_LEGACY_OUTPUT, + AY8910_DEFAULT_LOADS, + DEVCB_DEVICE_LINE_MEMBER("eeprom", eeprom_device, read_bit), /* inputs A: 0,EEPROM bit read */ + DEVCB_NULL, /* inputs B */ + DEVCB_NULL, /* outputs A */ + DEVCB_HANDLER(kaneko16_eeprom_reset_w) /* outputs B: 0,EEPROM reset */ +}; + + +/*************************************************************************** + The Berlin Wall +***************************************************************************/ + +/* + Berlwall interrupts: + + 1-3] e8c: + 4] e54: + 5] de4: + 6-7] rte +*/ + +static MACHINE_CONFIG_START( berlwall, kaneko16_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68000, 12000000) /* MC68000P12 */ + MCFG_CPU_PROGRAM_MAP(berlwall) + MCFG_CPU_VBLANK_INT_HACK(kaneko16_interrupt,KANEKO16_INTERRUPTS_NUM) + + MCFG_MACHINE_RESET(berlwall) + + /* video hardware */ + MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK) // mangled sprites otherwise + + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) + MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MCFG_SCREEN_SIZE(256, 256) + MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 240-1) + MCFG_SCREEN_UPDATE(berlwall) + + MCFG_GFXDECODE(1x4bit_1x4bit) + MCFG_PALETTE_LENGTH(2048 + 32768) /* 32768 static colors for the bg */ + + MCFG_PALETTE_INIT(berlwall) + MCFG_VIDEO_START(berlwall) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + + MCFG_SOUND_ADD("ay1", YM2149, 1000000) + MCFG_SOUND_CONFIG(ay8910_intf_dsw) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) + + MCFG_SOUND_ADD("ay2", YM2149, 1000000) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) + + MCFG_OKIM6295_ADD("oki", 12000000/6, OKIM6295_PIN7_LOW) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) +MACHINE_CONFIG_END + + +/*************************************************************************** + Bakuretsu Breaker +***************************************************************************/ + +static MACHINE_CONFIG_START( bakubrkr, kaneko16_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68000, XTAL_12MHz) /* verified on pcb */ + MCFG_CPU_PROGRAM_MAP(bakubrkr) + MCFG_CPU_VBLANK_INT_HACK(kaneko16_interrupt,KANEKO16_INTERRUPTS_NUM) + + MCFG_MACHINE_RESET(bakubrkr) + MCFG_EEPROM_93C46_ADD("eeprom") + + /* video hardware */ + MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK) // mangled sprites otherwise + + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(59) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) + MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MCFG_SCREEN_SIZE(256, 256) + MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 240-1) + MCFG_SCREEN_UPDATE(kaneko16) + + MCFG_GFXDECODE(1x4bit_2x4bit) + MCFG_PALETTE_LENGTH(2048) + + MCFG_VIDEO_START(kaneko16_2xVIEW2) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_SOUND_ADD("ay1", YM2149, XTAL_12MHz/6) /* verified on pcb */ + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MCFG_SOUND_ADD("ay2", YM2149, XTAL_12MHz/6) /* verified on pcb */ + MCFG_SOUND_CONFIG(ay8910_intf_eeprom) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MCFG_OKIM6295_ADD("oki", XTAL_12MHz/6, OKIM6295_PIN7_HIGH) /* verified on pcb */ + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_CONFIG_END + + +/*************************************************************************** + Blaze On +***************************************************************************/ + +/* + Blaze On: + 1] busy loop + 2] does nothing + 3] rte + 4] drives the game + 5] == 2 + 6-7] busy loop +*/ + +static MACHINE_CONFIG_START( blazeon, kaneko16_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68000,12000000) /* TMP68HC000-12 */ + MCFG_CPU_PROGRAM_MAP(blazeon) + MCFG_CPU_VBLANK_INT_HACK(kaneko16_interrupt,KANEKO16_INTERRUPTS_NUM) + + MCFG_CPU_ADD("audiocpu", Z80,4000000) /* D780C-2 */ + MCFG_CPU_PROGRAM_MAP(blazeon_soundmem) + MCFG_CPU_IO_MAP(blazeon_soundport) + + MCFG_MACHINE_RESET(blazeon) + + /* video hardware */ + MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK) + + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) + MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MCFG_SCREEN_SIZE(320, 240) + MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 240-1 -8) + MCFG_SCREEN_UPDATE(kaneko16) + + MCFG_GFXDECODE(1x4bit_1x4bit) + MCFG_PALETTE_LENGTH(2048) + + MCFG_VIDEO_START(kaneko16_1xVIEW2) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + + MCFG_SOUND_ADD("ymsnd", YM2151, 4000000) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) +MACHINE_CONFIG_END + + + +/*************************************************************************** + Great 1000 Miles Rally +***************************************************************************/ + +/* + gtmr interrupts: + + 3] 476: time, input ports, scroll registers + 4] 466->258e: set sprite ram + 5] 438: set sprite colors + + VIDEO_UPDATE_AFTER_VBLANK fixes the mangled/wrong colored sprites +*/ + +static MACHINE_CONFIG_START( gtmr, kaneko16_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("gtmr", M68000, XTAL_16MHz) /* verified on pcb */ + MCFG_CPU_PROGRAM_MAP(gtmr_map) + MCFG_CPU_VBLANK_INT_HACK(kaneko16_interrupt,KANEKO16_INTERRUPTS_NUM) + + MCFG_MACHINE_RESET(gtmr) + MCFG_NVRAM_ADD_0FILL("nvram") + + /* video hardware */ + MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK) + + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) + MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MCFG_SCREEN_SIZE(320, 240) + MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 240-1) + MCFG_SCREEN_UPDATE(kaneko16) + + MCFG_GFXDECODE(1x8bit_2x4bit) + MCFG_PALETTE_LENGTH(32768) + + MCFG_VIDEO_START(kaneko16_2xVIEW2) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_OKIM6295_ADD("oki1", XTAL_16MHz/8, OKIM6295_PIN7_LOW) /* verified on pcb */ + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) + + MCFG_OKIM6295_ADD("oki2", XTAL_16MHz/8, OKIM6295_PIN7_LOW) /* verified on pcb */ + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) +MACHINE_CONFIG_END + +/*************************************************************************** + Blood Warrior +***************************************************************************/ + +static MACHINE_CONFIG_DERIVED( bloodwar, gtmr ) + + /* basic machine hardware */ + MCFG_CPU_MODIFY("gtmr") + MCFG_CPU_PROGRAM_MAP(bloodwar) + + MCFG_MACHINE_RESET( bloodwar ) +MACHINE_CONFIG_END + +/*************************************************************************** + Great 1000 Miles Rally 2 +***************************************************************************/ + +static MACHINE_CONFIG_DERIVED( gtmr2, gtmr ) + + /* basic machine hardware */ + MCFG_CPU_MODIFY("gtmr") + MCFG_CPU_PROGRAM_MAP(gtmr2_map) +MACHINE_CONFIG_END + +/*************************************************************************** + Bonk's Adventure +***************************************************************************/ + +/* + Even though 3 interrupts are triggered, I set an int_num of 4. (notice '+1') + I agree that it is kind of a misuse of the function, but I haven't found + clues in code on how interrupts are scheduled... + IT5 is the main int, and needs more time to execute than IT 3 and 4. + Between other things, each of these 2 int are responsible of translating + a part of sprite buffer from work ram to sprite ram. + So now test mode is fully working and visible. + SebV +*/ +static MACHINE_CONFIG_DERIVED( bonkadv, gtmr ) + + /* basic machine hardware */ + MCFG_CPU_MODIFY("gtmr") + MCFG_CPU_PROGRAM_MAP(bonkadv) + MCFG_CPU_VBLANK_INT_HACK(kaneko16_interrupt,KANEKO16_INTERRUPTS_NUM + 1 ) // comment above + + MCFG_MACHINE_RESET( bonkadv ) +MACHINE_CONFIG_END + +/*************************************************************************** + Magical Crystal +***************************************************************************/ + +static MACHINE_CONFIG_START( mgcrystl, kaneko16_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68000, XTAL_12MHz) /* verified on pcb */ + MCFG_CPU_PROGRAM_MAP(mgcrystl) + MCFG_CPU_VBLANK_INT_HACK(kaneko16_interrupt,KANEKO16_INTERRUPTS_NUM) + + MCFG_MACHINE_RESET(mgcrystl) + MCFG_EEPROM_93C46_ADD("eeprom") + + /* video hardware */ + MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK) + + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) + MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MCFG_SCREEN_SIZE(256, 256) + MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1) + MCFG_SCREEN_UPDATE(kaneko16) + + MCFG_GFXDECODE(1x4bit_2x4bit) + MCFG_PALETTE_LENGTH(2048) + + MCFG_VIDEO_START(kaneko16_2xVIEW2) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_SOUND_ADD("ay1", YM2149, XTAL_12MHz/6) /* verified on pcb */ + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MCFG_SOUND_ADD("ay2", YM2149, XTAL_12MHz/6) /* verified on pcb */ + MCFG_SOUND_CONFIG(ay8910_intf_eeprom) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MCFG_OKIM6295_ADD("oki", XTAL_12MHz/6, OKIM6295_PIN7_HIGH) /* verified on pcb */ + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_CONFIG_END + + + +/*************************************************************************** + Shogun Warriors +***************************************************************************/ + +/* + shogwarr interrupts: + + 2] 100: rte + 3] 102: + 4] 136: + movem.l D0-D7/A0-A6, -(A7) + movea.l $207808.l, A0 ; from mcu? + jmp ($4,A0) + + other: busy loop +*/ + +#define SHOGWARR_INTERRUPTS_NUM 3 +static INTERRUPT_GEN( shogwarr_interrupt ) +{ + //kaneko16_state *state = device->machine().driver_data<kaneko16_state>(); + switch ( cpu_getiloops(device) ) + { + case 2: device_set_input_line(device, 2, HOLD_LINE); break; + case 1: device_set_input_line(device, 3, HOLD_LINE); break; + + // the code for this interrupt is provided by the MCU.. + case 0: device_set_input_line(device, 4, HOLD_LINE); + + calc3_mcu_run(device->machine()); + break; +#if 0 + case 0: + { + // hack, clear this ram address to get into test mode (interrupt would clear it) + if (state->mainram[0x2dfe/2]==0xff00) + { + state->mainram[0x2dfe/2]=0x0000; + } + } +#endif + } +} + +/* +static const UINT16 shogwarr_default_eeprom[64] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x4B41, 0x4E45, 0x4B4F, 0x2F41, 0x544F, 0x5020, 0x3139, 0x3932, + 0x4655, 0x4A49, 0xFFFF, 0x4D41, 0x2042, 0x5553, 0x5445, 0x5220, + 0x2053, 0x484F, 0xFFFF, 0x4E20, 0x5741, 0x5252, 0x494F, 0x5253, + 0xFFFF, 0x7079, 0x7269, 0xFFFF, 0x7420, 0x4B41, 0x4E45, 0x4B4F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0000, 0x0000, 0xFFFF +}; +*/ +// the above eeprom looks corrupt, some of the text is wrong, the game never writes this text tho.. maybe it should be as below +// leaving both here incase they relate to which tables get 'locked out' by the MCU somehow +static const UINT16 shogwarr_default_eeprom[64] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x4B41, 0x4E45, 0x4B4F, 0x2F41, 0x544F, 0x5020, 0x3139, 0x3932, + 0x4655, 0x4A49, 0x5941, 0x4D41, 0x2042, 0x5553, 0x5445, 0x5220, + 0x2053, 0x484F, 0x4755, 0x4E20, 0x5741, 0x5252, 0x494F, 0x5253, + 0x636F, 0x7079, 0x7269, 0x6768, 0x7420, 0x4B41, 0x4E45, 0x4B4F, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0000, 0x0000, 0xFFFF +}; + +static ADDRESS_MAP_START( shogwarr_oki1_map, AS_0, 8 ) + AM_RANGE(0x00000, 0x2ffff) AM_ROM + AM_RANGE(0x30000, 0x3ffff) AM_ROMBANK("bank10") +ADDRESS_MAP_END + +static ADDRESS_MAP_START( shogwarr_oki2_map, AS_0, 8 ) + AM_RANGE(0x00000, 0x3ffff) AM_ROMBANK("bank11") +ADDRESS_MAP_END + +static MACHINE_CONFIG_START( shogwarr, kaneko16_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68000, XTAL_12MHz) + MCFG_CPU_PROGRAM_MAP(shogwarr) + MCFG_CPU_VBLANK_INT_HACK(shogwarr_interrupt,SHOGWARR_INTERRUPTS_NUM) + + MCFG_MACHINE_RESET(shogwarr) + MCFG_EEPROM_93C46_ADD("eeprom") + MCFG_EEPROM_DATA(shogwarr_default_eeprom, 128) + + /* video hardware */ + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(59.1854) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MCFG_SCREEN_SIZE(320, 240) + MCFG_SCREEN_VISIBLE_AREA(40, 296-1, 16, 240-1) + MCFG_SCREEN_UPDATE(kaneko16) + + MCFG_GFXDECODE(1x4bit_1x4bit) + MCFG_PALETTE_LENGTH(2048) + + MCFG_VIDEO_START(kaneko16_1xVIEW2) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_OKIM6295_ADD("oki1", XTAL_16MHz/8, OKIM6295_PIN7_LOW) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + MCFG_DEVICE_ADDRESS_MAP(AS_0, shogwarr_oki1_map) + + MCFG_OKIM6295_ADD("oki2", XTAL_16MHz/8, OKIM6295_PIN7_LOW) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + MCFG_DEVICE_ADDRESS_MAP(AS_0, shogwarr_oki2_map) +MACHINE_CONFIG_END + + +static const UINT16 brapboys_default_eeprom[64] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0005, 0x0006, 0x2030, 0x0003, 0x6818, 0x0101, 0x0101, + 0x0101, 0x0001, 0x0004, 0x0008, 0x4B41, 0x4E45, 0x4B4F, 0x2020, + 0x4265, 0x2052, 0x6170, 0x2042, 0x6F79, 0x7300, 0x3030, 0x302E, + 0x3038, 0x10FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0035, 0xFFFF, 0xFFFF, 0xFFFF +}; + +static ADDRESS_MAP_START( brapboys_oki2_map, AS_0, 8 ) + AM_RANGE(0x00000, 0x1ffff) AM_ROM + AM_RANGE(0x20000, 0x3ffff) AM_ROMBANK("bank11") +ADDRESS_MAP_END + +static MACHINE_CONFIG_DERIVED( brapboys, shogwarr ) + MCFG_SOUND_MODIFY("oki2") + MCFG_DEVICE_ADDRESS_MAP(AS_0, brapboys_oki2_map) + + MCFG_DEVICE_REMOVE("eeprom") + MCFG_EEPROM_93C46_ADD("eeprom") + MCFG_EEPROM_DATA(brapboys_default_eeprom, 128) +MACHINE_CONFIG_END + +/*************************************************************************** + + + ROMs Loading + + +***************************************************************************/ + +/* + Sprites and tiles are stored in the ROMs using the same layout. But tiles + have the even and odd pixels swapped. So we use this function to untangle + them and have one single gfxlayout for both tiles and sprites. +*/ +static void kaneko16_unscramble_tiles(running_machine &machine, const char *region) +{ + UINT8 *RAM = machine.region(region)->base(); + int size = machine.region(region)->bytes(); + int i; + + if (RAM == NULL) return; + + for (i = 0; i < size; i ++) + { + RAM[i] = ((RAM[i] & 0xF0)>>4) + ((RAM[i] & 0x0F)<<4); + } +} + +static void kaneko16_expand_sample_banks(running_machine &machine, const char *region) +{ + /* The sample data for the first OKI has an address translator/ + banking register in it that munges the addresses as follows: + + Offsets 00000-2FFFF always come from ROM 00000-2FFFF + Offsets 30000-3FFFF come from ROM (10000*bank) + 00000-0FFFF + + Because we can't do this dynamically, we pre-generate all 16 + possible combinations of these and swap between them. + */ + int bank; + UINT8 *src0; + + if (machine.region(region)->bytes() < 0x40000 * 16) + fatalerror("gtmr SOUND1 region too small"); + + /* bank 0 maps to itself, so we just leave it alone */ + src0 = machine.region(region)->base(); + for (bank = 15; bank > 0; bank--) + { + UINT8 *srcn = src0 + 0x10000 * (bank < 3 ? 3 : bank); + UINT8 *dst = src0 + 0x40000 * bank; + + memcpy(dst + 0x30000, srcn + 0x00000, 0x10000); + memcpy(dst + 0x00000, src0 + 0x00000, 0x30000); + } +} + +static DRIVER_INIT( kaneko16 ) +{ + kaneko16_unscramble_tiles(machine, "gfx2"); + kaneko16_unscramble_tiles(machine, "gfx3"); +} + +static DRIVER_INIT( berlwall ) +{ + kaneko16_unscramble_tiles(machine, "gfx2"); +} + +static DRIVER_INIT( samplebank ) +{ + kaneko16_unscramble_tiles(machine, "gfx2"); + kaneko16_unscramble_tiles(machine, "gfx3"); + kaneko16_expand_sample_banks(machine, "oki1"); +} + + +/*************************************************************************** + + Bakuretsu Breaker + + USES TOSHIBA 68000 CPU W/TWO YM2149 & OKI M6295 FOR SOUND + + LOCATION TYPE + ------------------ + U38 27C040 + U37 " + U36 27C020 + U19 " + U18 " + +Bakuretsu Breaker / Explosive Breaker +Kaneko, 1992 + +PCB Layout +---------- + +ZOOFC-02 +|------------------------------------------| +| PAL TS020.U33 PAL | +| 6264 6264 | +| 6264 VIEW2-CHIP 6264 | +| 4464 4464 VIEW2-CHIP TS010.U4 | +| 4464 4464 | +| 4464 4464 699206P | +| 5116 (QFP44) | +| | +| TS002J.U36 MUX2-CHIP 699205P | +|VU-002 TS001J.U37 5116 (QFP44) J| +|(QFP160) TS000J.U38 A| +| 62256 TS100J.U18 M| +| 6116 6116 62256 TS101J.U19 M| +| PAL PAL A| +|16MHz PAL PAL TMP68HC000N-12 | +|12MHz PAL IU-001 | +| VU-001 (QFP44) | +| (QFP48) YM2149 PAL | +|93C46 YM2149 TS030.U5 M6295 | +| DSW1(4) | +|------------------------------------------| + +Notes: + 68000 clock: 12.000MHz + YM2149 clock: 2.000MHz + M6295 clock: 2.000MHz, sample rate = clock /132 + VSync: 59Hz + HSync: 15.68kHz + + +***************************************************************************/ + +ROM_START( explbrkr ) + ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "ts100e.u18", 0x000000, 0x040000, CRC(cc84a985) SHA1(1732a607cc1f894dd45cfc915dfe0407335f0073) ) + ROM_LOAD16_BYTE( "ts101e.u19", 0x000001, 0x040000, CRC(88f4afb7) SHA1(08b8efd6bd935bc1b8cf9753d58b38ccf9a70b4d) ) + + /* these actually match the other set but have different names on the board..*/ + ROM_REGION( 0x240000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD( "ts001e.u37", 0x000000, 0x080000, CRC(70b66e7e) SHA1(307ba27b623f67ee4b4023179870c270bac8ea22) ) + ROM_RELOAD( 0x100000, 0x080000 ) + ROM_LOAD( "ts000e.u38", 0x080000, 0x080000, CRC(a7a94143) SHA1(d811a7597402c161850ddf98cdb00661ea506c7d) ) + ROM_RELOAD( 0x180000, 0x080000 ) + ROM_LOAD( "ts002e.u36", 0x200000, 0x040000, CRC(611271e6) SHA1(811c21822b074fbb4bb809fed29d48bbd51d57a0) ) + + ROM_REGION( 0x100000, "gfx2", 0 ) /* Tiles */ + ROM_LOAD( "ts010.u4", 0x000000, 0x100000, CRC(df935324) SHA1(73b7aff8800a4e88a47ad426190b73dabdfbf142) ) + + ROM_REGION( 0x100000, "gfx3", 0 ) /* Tiles */ + ROM_LOAD( "ts020.u33", 0x000000, 0x100000, CRC(eb58c35d) SHA1(762c5219de6f729a0fc1df90fce09cdf711c2a1e) ) + + ROM_REGION( 0x100000, "user1", 0 ) /* OKI Sample ROM */ + ROM_LOAD( "ts030.u5", 0x000000, 0x100000, CRC(1d68e9d1) SHA1(aaa64a8e8d7cd7f91d2be346fafb9d1f29b40eda) ) + + /* $00000-$20000 stays the same in all sound banks, */ + /* the second half of the bank is what gets switched */ + ROM_REGION( 0x200000, "oki", 0 ) /* Samples */ + ROM_COPY( "user1", 0x000000, 0x000000, 0x020000) + ROM_COPY( "user1", 0x020000, 0x020000, 0x020000) + ROM_COPY( "user1", 0x000000, 0x040000, 0x020000) + ROM_COPY( "user1", 0x040000, 0x060000, 0x020000) + ROM_COPY( "user1", 0x000000, 0x080000, 0x020000) + ROM_COPY( "user1", 0x060000, 0x0a0000, 0x020000) + ROM_COPY( "user1", 0x000000, 0x0c0000, 0x020000) + ROM_COPY( "user1", 0x080000, 0x0e0000, 0x020000) + ROM_COPY( "user1", 0x000000, 0x100000, 0x020000) + ROM_COPY( "user1", 0x0a0000, 0x120000, 0x020000) + ROM_COPY( "user1", 0x000000, 0x140000, 0x020000) + ROM_COPY( "user1", 0x0c0000, 0x160000, 0x020000) + ROM_COPY( "user1", 0x000000, 0x180000, 0x020000) + ROM_COPY( "user1", 0x0e0000, 0x1a0000, 0x020000) + ROM_FILL( 0x1c0000, 0x020000, 0x00 ) + ROM_FILL( 0x1e0000, 0x020000, 0x00 ) +ROM_END + +ROM_START( bakubrkr ) + ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "ts100j.u18", 0x000000, 0x040000, CRC(8cc0a4fd) SHA1(e7e18b5ea236522a79ba9db8f573ac8f7ade504b) ) + ROM_LOAD16_BYTE( "ts101j.u19", 0x000001, 0x040000, CRC(aea92195) SHA1(e89f964e7e936fd7774f21956eb4ff5c9104837b) ) + + ROM_REGION( 0x240000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD( "ts001j.u37", 0x000000, 0x080000, CRC(70b66e7e) SHA1(307ba27b623f67ee4b4023179870c270bac8ea22) ) + ROM_RELOAD( 0x100000, 0x080000 ) + ROM_LOAD( "ts000j.u38", 0x080000, 0x080000, CRC(a7a94143) SHA1(d811a7597402c161850ddf98cdb00661ea506c7d) ) + ROM_RELOAD( 0x180000, 0x080000 ) + ROM_LOAD( "ts002j.u36", 0x200000, 0x040000, CRC(611271e6) SHA1(811c21822b074fbb4bb809fed29d48bbd51d57a0) ) + + ROM_REGION( 0x100000, "gfx2", 0 ) /* Tiles */ + ROM_LOAD( "ts010.u4", 0x000000, 0x100000, CRC(df935324) SHA1(73b7aff8800a4e88a47ad426190b73dabdfbf142) ) + + ROM_REGION( 0x100000, "gfx3", 0 ) /* Tiles */ + ROM_LOAD( "ts020.u33", 0x000000, 0x100000, CRC(eb58c35d) SHA1(762c5219de6f729a0fc1df90fce09cdf711c2a1e) ) + + ROM_REGION( 0x100000, "user1", 0 ) /* OKI Sample ROM */ + ROM_LOAD( "ts030.u5", 0x000000, 0x100000, CRC(1d68e9d1) SHA1(aaa64a8e8d7cd7f91d2be346fafb9d1f29b40eda) ) + + /* $00000-$20000 stays the same in all sound banks, */ + /* the second half of the bank is what gets switched */ + ROM_REGION( 0x200000, "oki", 0 ) /* Samples */ + ROM_COPY( "user1", 0x000000, 0x000000, 0x020000) + ROM_COPY( "user1", 0x020000, 0x020000, 0x020000) + ROM_COPY( "user1", 0x000000, 0x040000, 0x020000) + ROM_COPY( "user1", 0x040000, 0x060000, 0x020000) + ROM_COPY( "user1", 0x000000, 0x080000, 0x020000) + ROM_COPY( "user1", 0x060000, 0x0a0000, 0x020000) + ROM_COPY( "user1", 0x000000, 0x0c0000, 0x020000) + ROM_COPY( "user1", 0x080000, 0x0e0000, 0x020000) + ROM_COPY( "user1", 0x000000, 0x100000, 0x020000) + ROM_COPY( "user1", 0x0a0000, 0x120000, 0x020000) + ROM_COPY( "user1", 0x000000, 0x140000, 0x020000) + ROM_COPY( "user1", 0x0c0000, 0x160000, 0x020000) + ROM_COPY( "user1", 0x000000, 0x180000, 0x020000) + ROM_COPY( "user1", 0x0e0000, 0x1a0000, 0x020000) + ROM_FILL( 0x1c0000, 0x020000, 0x00 ) + ROM_FILL( 0x1e0000, 0x020000, 0x00 ) +ROM_END + + +/*************************************************************************** + + The Berlin Wall + +The Berlin Wall, Kaneko 1991, BW-002 + +---- + +BW-004 BW-008 VU-003 +BW-005 BW-009 VU-003 +BW-006 BW-00A VU-003 +BW-007 BW-00B 6116-90 + 6116-90 +BW-003 52256 52256 + BW101A BW100A +5864 +5864 MUX2 68000 + VIEW2 +BW300 +BW-002 +BW-001 42101 + 42101 +41464 41464 VU-002 +41464 41464 YM2149 IU-004 +41464 41464 YM2149 + SWB BW-000 6295 + SWA + + +PALs : BW-U47, BW-U48 (backgrounds encryption) + +***************************************************************************/ + +ROM_START( berlwall ) + ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "u23_01.bin", 0x000000, 0x020000, CRC(76b526ce) SHA1(95ba7cccbe88fd695c28b6a7c25a1afd130c1aa6) ) + ROM_LOAD16_BYTE( "u39_01.bin", 0x000001, 0x020000, CRC(78fa7ef2) SHA1(8392de6e307dcd2bf5bcbeb37d578d33246acfcf) ) + + ROM_REGION( 0x120000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD( "bw001", 0x000000, 0x080000, CRC(bc927260) SHA1(44273a8b6a041504d54da4a7897adf23e3e9db10) ) + ROM_LOAD( "bw002", 0x080000, 0x080000, CRC(223f5465) SHA1(6ed077514ab4370a215a4a60c3aecc8b72ed1c97) ) + ROM_LOAD( "bw300", 0x100000, 0x020000, CRC(b258737a) SHA1(b5c8fe44a8dcfc19bccba896bdb73030c5843544) ) + + ROM_REGION( 0x080000, "gfx2", 0 ) /* Tiles (Scrambled) */ + ROM_LOAD( "bw003", 0x000000, 0x080000, CRC(fbb4b72d) SHA1(07a0590f18b3bba1843ef6a89a5c214e8e605cc3) ) + + ROM_REGION( 0x400000, "gfx3", 0 ) /* High Color Background */ + ROM_LOAD16_BYTE( "bw004", 0x000000, 0x080000, CRC(5300c34d) SHA1(ccb12ea05f89ef68bcfe003faced2ffea24c4bf0) ) + ROM_LOAD16_BYTE( "bw008", 0x000001, 0x080000, CRC(9aaf2f2f) SHA1(1352856159e19f07e8e30f9c44b21347103ce024) ) // FIXED BITS (xxxxxxx0) + ROM_LOAD16_BYTE( "bw005", 0x100000, 0x080000, CRC(16db6d43) SHA1(0158d0278d085487400ad4384b8cc9618503319e) ) + ROM_LOAD16_BYTE( "bw009", 0x100001, 0x080000, CRC(1151a0b0) SHA1(584a0da7eb7f06450f95e76faa20d19f053cb74c) ) // FIXED BITS (xxxxxxx0) + ROM_LOAD16_BYTE( "bw006", 0x200000, 0x080000, CRC(73a35d1f) SHA1(af919cf858c5923aea45e0d8d91493e6284cb99e) ) + ROM_LOAD16_BYTE( "bw00a", 0x200001, 0x080000, CRC(f447dfc2) SHA1(1254eafea92e8e416deedf21cb01990ffc4f896c) ) // FIXED BITS (xxxxxxx0) + ROM_LOAD16_BYTE( "bw007", 0x300000, 0x080000, CRC(97f85c87) SHA1(865e076e098c49c96639f62be793f2de24b4926b) ) + ROM_LOAD16_BYTE( "bw00b", 0x300001, 0x080000, CRC(b0a48225) SHA1(de256bb6e2a824114274bff0c6c1234934c31c49) ) // FIXED BITS (xxxxxxx0) + + ROM_REGION( 0x040000, "oki", 0 ) /* Samples */ + ROM_LOAD( "bw000", 0x000000, 0x040000, CRC(d8fe869d) SHA1(75e9044c4164ca6db9519fcff8eca6c8a2d8d5d1) ) +ROM_END + + +/* +berlwalt original bug ? + +info from SebV: + +After about level 5 or so, if you insert a coin when the continue screen +pops up, an error message "Copy Board" pops up. +---------------------------------------- +Happened to me when player dies, at level 4. +The message is not written in ROM, its sprite ram address is (always?) +$30fd40 +Routine $337d2 writes it (and routine $5c8c erases it) +The 'COPY BOARD!' message in stored in ROM directly as sprite number +($1cfa8) + +$20288a : seems to contain the level number (initialized to 2 (?) when a +game is started, and is incremented by 1 once a level is finished) + +01CF3E: move.b $20288a.l, D0 +01CF44: cmpi.b #$d, D0 +01CF48: bcs 1cf76 ; branch not taken -=> 'COPY BOARD!' +01CF4A: movem.l D0/A0-A2, -(A7) +01CF4E: movea.l A0, A1 +01CF50: lea ($4c,PC), A0; ($1cf9e) +01CF54: nop +01CF56: lea ($a,A0), A0 ; A0 = $1cfa8 = 'COPY BOARD!' +01CF5A: lea $30e064.l, A1 +01CF60: lea (-$64,A1), A1 +01CF64: lea ($1d40,A1), A1 +01CF68: move.b #$80, D1 +01CF6C: jsr $33776.l ; display routine +01CF72: movem.l (A7)+, D0/A0-A2 +01CF76: + +berlwall levels: 1-1,2,3(anim),... +berlwalt levels: 1-1(anim)2-1/2/3/4/5(anim)3-1/2/3/4/5(anim)4-1(*) + +note: berlwall may be genuine while berlwalt may be bootleg! because +stage 1-1 of berlwalt is stage 1-3 of berlwall, and berlwall has +explanation ingame. + the flyer from TAFA shows main character as +berlwall and not berlwalt! +-------------------------------------------------------------------------------- +*/ + +ROM_START( berlwallt ) + ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "bw100a", 0x000000, 0x020000, CRC(e6bcb4eb) SHA1(220b8fddc79230b4f6a8cf33e1035355c485e8d1) ) + ROM_LOAD16_BYTE( "bw101a", 0x000001, 0x020000, CRC(38056fb2) SHA1(48338b9a5ebea872286541a3c45016673c4af76b) ) + + ROM_REGION( 0x120000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD( "bw001", 0x000000, 0x080000, CRC(bc927260) SHA1(44273a8b6a041504d54da4a7897adf23e3e9db10) ) + ROM_LOAD( "bw002", 0x080000, 0x080000, CRC(223f5465) SHA1(6ed077514ab4370a215a4a60c3aecc8b72ed1c97) ) + ROM_LOAD( "bw300", 0x100000, 0x020000, CRC(b258737a) SHA1(b5c8fe44a8dcfc19bccba896bdb73030c5843544) ) + + ROM_REGION( 0x080000, "gfx2", 0 ) /* Tiles (Scrambled) */ + ROM_LOAD( "bw003", 0x000000, 0x080000, CRC(fbb4b72d) SHA1(07a0590f18b3bba1843ef6a89a5c214e8e605cc3) ) + + ROM_REGION( 0x400000, "gfx3", 0 ) /* High Color Background */ + ROM_LOAD16_BYTE( "bw004", 0x000000, 0x080000, CRC(5300c34d) SHA1(ccb12ea05f89ef68bcfe003faced2ffea24c4bf0) ) + ROM_LOAD16_BYTE( "bw008", 0x000001, 0x080000, CRC(9aaf2f2f) SHA1(1352856159e19f07e8e30f9c44b21347103ce024) ) // FIXED BITS (xxxxxxx0) + ROM_LOAD16_BYTE( "bw005", 0x100000, 0x080000, CRC(16db6d43) SHA1(0158d0278d085487400ad4384b8cc9618503319e) ) + ROM_LOAD16_BYTE( "bw009", 0x100001, 0x080000, CRC(1151a0b0) SHA1(584a0da7eb7f06450f95e76faa20d19f053cb74c) ) // FIXED BITS (xxxxxxx0) + ROM_LOAD16_BYTE( "bw006", 0x200000, 0x080000, CRC(73a35d1f) SHA1(af919cf858c5923aea45e0d8d91493e6284cb99e) ) + ROM_LOAD16_BYTE( "bw00a", 0x200001, 0x080000, CRC(f447dfc2) SHA1(1254eafea92e8e416deedf21cb01990ffc4f896c) ) // FIXED BITS (xxxxxxx0) + ROM_LOAD16_BYTE( "bw007", 0x300000, 0x080000, CRC(97f85c87) SHA1(865e076e098c49c96639f62be793f2de24b4926b) ) + ROM_LOAD16_BYTE( "bw00b", 0x300001, 0x080000, CRC(b0a48225) SHA1(de256bb6e2a824114274bff0c6c1234934c31c49) ) // FIXED BITS (xxxxxxx0) + + ROM_REGION( 0x040000, "oki", 0 ) /* Samples */ + ROM_LOAD( "bw000", 0x000000, 0x040000, CRC(d8fe869d) SHA1(75e9044c4164ca6db9519fcff8eca6c8a2d8d5d1) ) +ROM_END + + +/*************************************************************************** + + Blaze On (Japan version) + +CPU: TMP68HC000-12/D780C-2(Z80) +SOUND: YM2151 +OSC: 13.3330/16.000MHz +CUSTOM: KANEKO VU-002 x2 + KANEKO 23160-509 VIEW2-CHIP + KANEKO MUX2-CHIP + KANEKO HELP1-CHIP + +--------------------------------------------------- + filemanes devices kind +--------------------------------------------------- + BZ_PRG1.U80 27C020 68000 main prg. + BZ_PRG2.U81 27C020 68000 main prg. + 3.U45 27C010 Z80 sound prg. + BZ_BG.U2 57C8200 BG CHR + BZ_SP1.U20 27C8001 OBJ + BZ_SP2.U21 27C8001 OBJ + BZ_SP1.U68 27C8001 OBJ (same as BZ_SP1.U20 for 2nd sprite chip) + BZ_SP2.U86 27C8001 OBJ (same as BZ_SP2.U21 for 2nd sprite chip) + +***************************************************************************/ + +ROM_START( blazeon ) + ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "bz_prg1.u80", 0x000000, 0x040000, CRC(8409e31d) SHA1(a9dfc299f4b457df190314401aef309adfaf9bae) ) + ROM_LOAD16_BYTE( "bz_prg2.u81", 0x000001, 0x040000, CRC(b8a0a08b) SHA1(5f275b98d3e49a834850b45179d26e8c2f9fd604) ) + + ROM_REGION( 0x020000, "audiocpu", 0 ) /* Z80 Code */ + ROM_LOAD( "3.u45", 0x000000, 0x020000, CRC(52fe4c94) SHA1(896230e4627503292575bbd84edc3cf9cb18b27e) ) // 1xxxxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD( "bz_sp1.u20", 0x000000, 0x100000, CRC(0d5809a1) SHA1(e72669f95b050d1967d10a865bab8f3634c9daad) ) + ROM_LOAD( "bz_sp2.u21", 0x100000, 0x100000, CRC(56ead2bd) SHA1(463723f3c533603ce3a95310e9ce12b4e582b52d) ) + + ROM_REGION( 0x100000, "gfx2", 0 ) /* Tiles (Scrambled) */ + ROM_LOAD( "bz_bg.u2", 0x000000, 0x100000, CRC(fc67f19f) SHA1(f5d9e037a736b0932efbfb48587de08bec93df5d) ) +ROM_END + +/*************************************************************************** + + Blood Warrior + +Kaneko 1994 + +TOP BOARD: Z09AF-005 + +CPU - Toshiba TMP68HC000N - 16 +SOUND - OKI M6295 x2 +QUARTZ OSCILLATORS AT 27.0000MHz, 16.0000MHz, 20.0000MHz and 33.3330MHz +RAM - LC3664 x6, 424260 x2, LH52B256D x6, D42101C x2 + + +PCU11.u11 - 18CV8PC \ +PCU15.u15 - 18CV8PC | NEAR OKI +Z091P016.u16 - 18CV8PC / +Z091P013.u13 - 18CV8PC \ +PCU17.u17 - 18CV8PC | +PCU14.u14 - 18CV8PC | NEAR 68000 +PCU94.u94 - 18CV8PC | +PCU92.u92 - 18CV8PC | +Z092P093.u93 - 18CV8PC / +ALL ABOVE NOT DUMPED + +Custom Chips + +231609-509 View2-Chip x2 +KC-002 L0002 023 9321EK702 +9343T - 44 pin PQFP (NEAR JAMMMA CONNECTOR) + +BOTTOM BOARD: Z09AF-ROM4 + +TBS0P01 452 9339PK001 - 74 pin PQFP (NEC uPD78324 series MCU) + +ofs1g006.u6 - GAL16V8B +ofs1g007.u7 - GAL16V8B +ofs1p059.u59 - 18CV8PC +ofs1p511.u511 - 18CV8PC +ALL ABOVE NOT DUMPED + +ROMS + +9346.u126 - 93C46 +ofdox3.U124 - 27C010 +ofp1f3.U513 - 27C4000 +ofpof3.U514 - 27C4000 +of101f0223.U101 - 27C800 +of20902011.u17 - 27C080 +of210000213.u19 - 27C080 +of2110215.u21 - 27C080 +of21200217.u23 - 27C080 +of21300219.u25 - 27C080 +of21400221.u27 - 27C080 +of1000222.u99 - 27C800 +of0010226.u55 - 27C800 +of3000225.u51 - 27C800 +of2080209.u28 - 27V160 +of2060207.u14 - 27V160 +of2070208.u15 - 27V160 +of2050206.u13 - 27V160 +of2040205.u12 - 27V160 +of2030204.u11 - 27V160 +of2020203.u10 - 27V160 +of2010202.u9 - 27V160 +of2000201.u8 - 27V160 +of209e0210.u16 - 27C080 +of210e0212.u18 - 27C080 +of211e0214.u20 - 27C080 +of212e0216.u22 - 27C080 +of213e0218.u24 - 27C080 +of214e0220.u26 - 27C080 + +***************************************************************************/ + +ROM_START( bloodwar ) + ROM_REGION( 0x100000, "gtmr", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "ofp0f3.514", 0x000000, 0x080000, CRC(0c93da15) SHA1(65b6b1b4acfc32c551ae4fbe6a13f7f2b8554dbf) ) + ROM_LOAD16_BYTE( "ofp1f3.513", 0x000001, 0x080000, CRC(894ecbe5) SHA1(bf403d19e6315266114ac742a08cac903e7b54b5) ) + + ROM_REGION( 0x020000, "mcudata", 0 ) /* MCU Code */ + ROM_LOAD16_WORD_SWAP( "ofd0x3.124", 0x000000, 0x020000, CRC(399f2005) SHA1(ff0370724770c35963953fd9596d9f808ba87d8f) ) + + + ROM_REGION( 0x1e00000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD ( "of-200-0201.8", 0x0000000, 0x200000, CRC(bba63025) SHA1(daec5285469ee953f6f838fe3cb3903524e9ac39) ) + ROM_LOAD ( "of-201-0202.9", 0x0200000, 0x200000, CRC(4ffd9ddc) SHA1(62bc8c0ed2efab407fc2956c514c3e732bcc47ee) ) + ROM_LOAD ( "of-202-0203.10", 0x0400000, 0x200000, CRC(fbcc5363) SHA1(9eff48c29d5c887d39e4db442c6ee51ec879521e) ) + ROM_LOAD ( "of-203-0204.11", 0x0600000, 0x200000, CRC(8e818ce9) SHA1(bc37d35247edfc563400cd67459d455b1fea6eab) ) + ROM_LOAD ( "of-204-0205.12", 0x0800000, 0x200000, CRC(70c4a76b) SHA1(01b17bda156f2e6f480bdc976927c8bba47c1186) ) + ROM_LOAD ( "of-205-0206.13", 0x0a00000, 0x200000, CRC(80c667bb) SHA1(7edf33c713c8448ff73fa84b9f7684dd4d46eed1) ) + ROM_LOAD ( "of-206-0207.14", 0x0c00000, 0x200000, CRC(c2028c97) SHA1(ac3b73ff34f84015432ceb22cf9c57ab0ff07a70) ) + ROM_LOAD ( "of-207-0208.15", 0x0e00000, 0x200000, CRC(b1f30c61) SHA1(2ae010c10b7a2ae09df904f7ea81425e80389622) ) + ROM_LOAD ( "of-208-0209.28", 0x1000000, 0x200000, CRC(a8f29545) SHA1(5d018147aa71207f679909343104deaa0f08fd9d) ) + ROM_LOAD16_BYTE( "of-209e-0210.16", 0x1200000, 0x100000, CRC(93018468) SHA1(d156f408a78fbd736048ce33e44c0b1e10403b0e) ) + ROM_LOAD16_BYTE( "of-2090-2011.17", 0x1200001, 0x100000, CRC(3fb226a1) SHA1(efba54f82fb9914559faad5fba92aa108ec039d5) ) + ROM_LOAD16_BYTE( "of-210e-0212.18", 0x1400000, 0x100000, CRC(80f3fa1b) SHA1(ca0e84cb47228ef5ac3b94238a33c3ebc3c2f528) ) + ROM_LOAD16_BYTE( "of-2100-0213.19", 0x1400001, 0x100000, CRC(8ca3a3d6) SHA1(b6f3876f987ce6828bfa26ca492ff6ca2d282d80) ) + ROM_LOAD16_BYTE( "of-211e-0214.20", 0x1600000, 0x100000, CRC(8d3d96f7) SHA1(0a7c459f02938f86d53979498647c73837eb9e51) ) + ROM_LOAD16_BYTE( "of-2110-0215.21", 0x1600001, 0x100000, CRC(78268230) SHA1(63fbf88551f6fde833222ae6a4382891e1bf5b39) ) + ROM_LOAD16_BYTE( "of-212e-0216.22", 0x1800000, 0x100000, CRC(5a013d99) SHA1(c4af944c8f0b33a93b4bb083e32e2901c5607a39) ) + ROM_LOAD16_BYTE( "of-2120-0217.23", 0x1800001, 0x100000, CRC(84ed25bd) SHA1(ddff811d326586eb7353230e74db37867af075eb) ) + ROM_LOAD16_BYTE( "of-213e-0218.24", 0x1a00000, 0x100000, CRC(861bc5b1) SHA1(a85936781a56b5406bee2e4f36fadcb5b9f43b05) ) + ROM_LOAD16_BYTE( "of-2130-0219.25", 0x1a00001, 0x100000, CRC(a79b8119) SHA1(62e3fb28fd3a538a8191a51242dbed7e88c62a54) ) + ROM_LOAD16_BYTE( "of-214e-0220.26", 0x1c00000, 0x100000, CRC(43c622de) SHA1(73efe57233f056127e2d34590c624f39d1c0ab79) ) + ROM_LOAD16_BYTE( "of-2140-0221.27", 0x1c00001, 0x100000, CRC(d10bf03c) SHA1(a81d6b7df7382fc8d50614c1332611e0c202b805) ) + + ROM_REGION( 0x100000, "gfx2", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "of-300-0225.51", 0x000000, 0x100000, CRC(fbc3c08a) SHA1(0ba52b381e7a10fb1513244b394438b440950af3) ) + + ROM_REGION( 0x100000, "gfx3", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "of-301-0226.55", 0x000000, 0x100000, CRC(fcf215de) SHA1(83015f10e62b917efd6e3edfbd45fb8f9b35db2b) ) + + ROM_REGION( 0x400000, "oki1", 0 ) /* Samples, plus room for expansion */ + ROM_LOAD( "of-101-f-0223.101", 0x000000, 0x100000, CRC(295f3c93) SHA1(558698f1d04b23dd2a73e2eae5ecce598defb228) ) /* 0224 ? */ + + ROM_REGION( 0x100000, "oki2", 0 ) /* Samples */ + ROM_LOAD( "of-100-0222.99", 0x000000, 0x100000, CRC(42b12269) SHA1(f9d9c42057e176710f09e8db0bfcbf603c15ca11) ) +ROM_END + +ROM_START( oedfight ) + ROM_REGION( 0x100000, "gtmr", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "ofp0j3.514", 0x000000, 0x080000, CRC(0c93da15) SHA1(65b6b1b4acfc32c551ae4fbe6a13f7f2b8554dbf) ) + ROM_LOAD16_BYTE( "ofp1j3.513", 0x000001, 0x080000, CRC(cc59de49) SHA1(48ff4ed40ad22768054a59bdf5ce0e00891d8f0e) ) + + ROM_REGION( 0x020000, "mcudata", 0 ) /* MCU Code */ + ROM_LOAD16_WORD_SWAP( "ofd0x3.124", 0x000000, 0x020000, CRC(399f2005) SHA1(ff0370724770c35963953fd9596d9f808ba87d8f) ) + + ROM_REGION( 0x1e00000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD ( "of-200-0201.8", 0x0000000, 0x200000, CRC(bba63025) SHA1(daec5285469ee953f6f838fe3cb3903524e9ac39) ) + ROM_LOAD ( "of-201-0202.9", 0x0200000, 0x200000, CRC(4ffd9ddc) SHA1(62bc8c0ed2efab407fc2956c514c3e732bcc47ee) ) + ROM_LOAD ( "of-202-0203.10", 0x0400000, 0x200000, CRC(fbcc5363) SHA1(9eff48c29d5c887d39e4db442c6ee51ec879521e) ) + ROM_LOAD ( "of-203-0204.11", 0x0600000, 0x200000, CRC(8e818ce9) SHA1(bc37d35247edfc563400cd67459d455b1fea6eab) ) + ROM_LOAD ( "of-204-0205.12", 0x0800000, 0x200000, CRC(70c4a76b) SHA1(01b17bda156f2e6f480bdc976927c8bba47c1186) ) + ROM_LOAD ( "of-205-0206.13", 0x0a00000, 0x200000, CRC(80c667bb) SHA1(7edf33c713c8448ff73fa84b9f7684dd4d46eed1) ) + ROM_LOAD ( "of-206-0207.14", 0x0c00000, 0x200000, CRC(c2028c97) SHA1(ac3b73ff34f84015432ceb22cf9c57ab0ff07a70) ) + ROM_LOAD ( "of-207-0208.15", 0x0e00000, 0x200000, CRC(b1f30c61) SHA1(2ae010c10b7a2ae09df904f7ea81425e80389622) ) + ROM_LOAD ( "of-208-0209.28", 0x1000000, 0x200000, CRC(a8f29545) SHA1(5d018147aa71207f679909343104deaa0f08fd9d) ) + ROM_LOAD16_BYTE( "of-209e-0210.16", 0x1200000, 0x100000, CRC(93018468) SHA1(d156f408a78fbd736048ce33e44c0b1e10403b0e) ) + ROM_LOAD16_BYTE( "of-2090-2011.17", 0x1200001, 0x100000, CRC(3fb226a1) SHA1(efba54f82fb9914559faad5fba92aa108ec039d5) ) + ROM_LOAD16_BYTE( "of-210e-0212.18", 0x1400000, 0x100000, CRC(80f3fa1b) SHA1(ca0e84cb47228ef5ac3b94238a33c3ebc3c2f528) ) + ROM_LOAD16_BYTE( "of-2100-0213.19", 0x1400001, 0x100000, CRC(8ca3a3d6) SHA1(b6f3876f987ce6828bfa26ca492ff6ca2d282d80) ) + ROM_LOAD16_BYTE( "of-211e-0214.20", 0x1600000, 0x100000, CRC(8d3d96f7) SHA1(0a7c459f02938f86d53979498647c73837eb9e51) ) + ROM_LOAD16_BYTE( "of-2110-0215.21", 0x1600001, 0x100000, CRC(78268230) SHA1(63fbf88551f6fde833222ae6a4382891e1bf5b39) ) + ROM_LOAD16_BYTE( "of-212e-0216.22", 0x1800000, 0x100000, CRC(5a013d99) SHA1(c4af944c8f0b33a93b4bb083e32e2901c5607a39) ) + ROM_LOAD16_BYTE( "of-2120-0217.23", 0x1800001, 0x100000, CRC(84ed25bd) SHA1(ddff811d326586eb7353230e74db37867af075eb) ) + ROM_LOAD16_BYTE( "of-213e-0218.24", 0x1a00000, 0x100000, CRC(861bc5b1) SHA1(a85936781a56b5406bee2e4f36fadcb5b9f43b05) ) + ROM_LOAD16_BYTE( "of-2130-0219.25", 0x1a00001, 0x100000, CRC(a79b8119) SHA1(62e3fb28fd3a538a8191a51242dbed7e88c62a54) ) + ROM_LOAD16_BYTE( "of-214e-0220.26", 0x1c00000, 0x100000, CRC(43c622de) SHA1(73efe57233f056127e2d34590c624f39d1c0ab79) ) + ROM_LOAD16_BYTE( "of-2140-0221.27", 0x1c00001, 0x100000, CRC(d10bf03c) SHA1(a81d6b7df7382fc8d50614c1332611e0c202b805) ) + + ROM_REGION( 0x100000, "gfx2", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "of-300-0225.51", 0x000000, 0x100000, CRC(fbc3c08a) SHA1(0ba52b381e7a10fb1513244b394438b440950af3) ) + + ROM_REGION( 0x100000, "gfx3", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "of-301-0226.55", 0x000000, 0x100000, CRC(fcf215de) SHA1(83015f10e62b917efd6e3edfbd45fb8f9b35db2b) ) + + ROM_REGION( 0x400000, "oki1", 0 ) /* Samples, plus room for expansion */ + ROM_LOAD( "of-101-j-0224.101", 0x000000, 0x100000, CRC(83a1f826) SHA1(3b5f576735d5954770cd572b03e71bf121ae88d2) ) + + ROM_REGION( 0x100000, "oki2", 0 ) /* Samples */ + ROM_LOAD( "of-100-0222.99", 0x000000, 0x100000, CRC(42b12269) SHA1(f9d9c42057e176710f09e8db0bfcbf603c15ca11) ) +ROM_END + + +/*************************************************************************** + + Great 1000 Miles Rally + +Kaneko 1994 + +TOP BOARD: Z09AF-005 + +CPU - Toshiba TMP68HC000N - 16 +SOUND - OKI M6295 x2 +QUARTZ OSCILLATORS AT 27.0000MHz, 16.0000MHz, 20.0000MHz and 33.3330MHz +RAM - LC3664 x6, 424260 x2, LH52B256D x6, D42101C x2 + +Custom Chips + +231609-509 View2-Chip x2 +KC-002 L0002 023 9321EK702 +9343T - 44 pin PQFP (NEAR JAMMMA CONNECTOR) + +BOTTOM BOARD: Z09AF-ROM5 + +TBS0P01 452 9339PK001 - 74 pin PQFP (NEC uPD78324 series MCU) + +GMMU2+1 512K * 2 68k +GMMU23 1M OKI6295: 00000-2ffff + chunks of 0x10000 with headers +GMMU24 1M OKI6295: chunks of 0x40000 with headers - FIRST AND SECOND HALF IDENTICAL + +GMMU27 2M sprites +GMMU28 2M sprites +GMMU29 2M sprites +GMMU30 512k sprites + +GMMU64 1M sprites - FIRST AND SECOND HALF IDENTICAL +GMMU65 1M sprites - FIRST AND SECOND HALF IDENTICAL + +GMMU52 2M tiles + + +--------------------------------------------------------------------------- + Game code +--------------------------------------------------------------------------- + +100000.b <- (!b00000.b) & 7f [1p] + 01.b previous value of the above + 02.b bits gone high + +100008.b <- (!b00002.b) & 7f [2p] + +100010.b <- !b00004.b [coins] + 11.b previous value of the above + 12.b bits gone high + +100013.b <- b00006.b (both never accessed again?) + +100015.b <- wheel value + +600000.w <- 100a20.w + 100a30.w 600002.w <- 100a22.w + 100a32.w +600004.w <- 100a24.w + 100a34.w 600006.w <- 100a26.w + 100a36.w + +680000.w <- 100a28.w + 100a38.w 680002.w <- 100a2a.w + 100a3a.w +680004.w <- 100a2c.w + 100a3c.w 680006.w <- 100a2e.w + 100a3e.w + +101265.b <- DSW (from 206000) +101266 <- Settings from NVRAM (0x80 bytes from 208000) + +1034f8.b credits +103502.b coins x .. +103503.b .. credits + +1035ec.l *** Time (BCD: seconds * 10000) *** +103e64.w *** Speed << 4 *** + +10421a.b bank for the oki mapped at 800000 +104216.b last value of the above + +10421c.b bank for the oki mapped at 880000 +104218.b last value of the above + +ROUTINES: + +dd6 print string: a2->scr ; a1->string ; d1.l = xpos.w<<6|ypos.w<<6 + +Trap #2 = 43a0 ; d0.w = routine index ; (where not specified: 43c0): +1: 43C4 2: 43F8 3: 448E 4: 44EE +5: 44D2 6: 4508 7: 453A 10: 0AF6 +18: 4580 19: 4604 +20> 2128 writes 700000-70001f +21: 21F6 +24> 2346 clears 400000-401407 (641*8 = $281*8) +30> 282A writes 600008/9/b/e-f, 680008/9/b/e-f +31: 295A +32> 2B36 100a30-f <- 100a10-f +34> 2B4C clears 500000-503fff, 580000-583fff +35> 2B9E d1.w = selects between: 500000;501000;580000;581000. + Fill 0x1000 bytes from there with d2.l + +70: 2BCE> 11d8a +71: 2BD6 +74: 2BDE 90: 3D44 +91> 3D4C wait for bit 0 of d00000 to be 0 +92> 3D5C 200010.w<-D1 200012.w<-D2 200014.w<-D3 +f1: 10F6 + +***************************************************************************/ + +/* This version displays: + + tb05mm-eu "1000 miglia" + master up= 94/07/18 15:12:35 */ + +ROM_START( gtmr ) + ROM_REGION( 0x100000, "gtmr", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "u2.bin", 0x000000, 0x080000, CRC(031799f7) SHA1(a59a9635002d139247828e3b74f6cf2fbdd5e569) ) + ROM_LOAD16_BYTE( "u1.bin", 0x000001, 0x080000, CRC(6238790a) SHA1(a137fd581138804534f3193068f117611a982004) ) + + ROM_REGION( 0x020000, "mcudata", 0 ) /* MCU Code */ + ROM_LOAD16_WORD_SWAP( "mmd0x2.u124.bin", 0x000000, 0x020000, CRC(3d7cb329) SHA1(053106acde642a414fde0b01105fe6762b6a10f6) ) // from gtmra + + ROM_REGION( 0x840000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD( "mm-200-402-s0.bin", 0x000000, 0x200000, CRC(c0ab3efc) SHA1(e6cd15480977b036234d91e6f3a6e21b7f0a3c3e) ) + ROM_LOAD( "mm-201-403-s1.bin", 0x200000, 0x200000, CRC(cf6b23dc) SHA1(ccfd0b17507e091e55c169361cd6a6b19641b717) ) + ROM_LOAD( "mm-202-404-s2.bin", 0x400000, 0x200000, CRC(8f27f5d3) SHA1(219a86446ce2556682009d8aff837480f040a01e) ) + ROM_LOAD( "mm-203-405-s3.bin", 0x600000, 0x080000, CRC(e9747c8c) SHA1(2507102ec34755c6f110eadb3444e6d3a3474051) ) + ROM_LOAD16_BYTE( "mms1x2.u30.bin", 0x800001, 0x020000, CRC(b42b426f) SHA1(6aee5759b5f0786c5ee074d9df3d2716919ea621) ) + ROM_LOAD16_BYTE( "mms0x2.u29.bin", 0x800000, 0x020000, CRC(bd22b7d2) SHA1(ef82d00d72439590c71aed33ecfabc6ee71a6ff9) ) + + ROM_REGION( 0x200000, "gfx2", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "mm-300-406-a0.bin", 0x000000, 0x200000, CRC(b15f6b7f) SHA1(5e84919d788add53fc87f4d85f437df413b1dbc5) ) + + ROM_REGION( 0x200000, "gfx3", 0 ) /* Tiles (scrambled) */ + ROM_COPY("gfx2",0,0,0x200000) // it isn't on the board twice. + + ROM_REGION( 0x400000, "oki1", 0 ) /* Samples, plus room for expansion */ + ROM_LOAD( "mm-100-401-e0.bin", 0x000000, 0x100000, CRC(b9cbfbee) SHA1(051d48a68477ef9c29bd5cc0bb7955d513a0ab94) ) // 16 x $10000 + + ROM_REGION( 0x100000, "oki2", ROMREGION_ERASE00 ) /* Samples */ + /* Not present on this board */ +ROM_END + +ROM_START( gtmra ) + ROM_REGION( 0x100000, "gtmr", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "mmp0x2.u514.bin", 0x000000, 0x080000, CRC(ba4a77c8) SHA1(efb6ae0e7aa71ab0c5f486f799bf31edcec24e2b) ) + ROM_LOAD16_BYTE( "mmp1x2.u513.bin", 0x000001, 0x080000, CRC(a2b9034e) SHA1(466bcb1bf7124eb15d23b25c4e1307b9706474ec) ) + + ROM_REGION( 0x020000, "mcudata", 0 ) /* MCU Code */ + ROM_LOAD16_WORD_SWAP( "mmd0x2.u124.bin", 0x000000, 0x020000, CRC(3d7cb329) SHA1(053106acde642a414fde0b01105fe6762b6a10f6) ) + + ROM_REGION( 0x840000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD( "mm-200-402-s0.bin", 0x000000, 0x200000, CRC(c0ab3efc) SHA1(e6cd15480977b036234d91e6f3a6e21b7f0a3c3e) ) + ROM_LOAD( "mm-201-403-s1.bin", 0x200000, 0x200000, CRC(cf6b23dc) SHA1(ccfd0b17507e091e55c169361cd6a6b19641b717) ) + ROM_LOAD( "mm-202-404-s2.bin", 0x400000, 0x200000, CRC(8f27f5d3) SHA1(219a86446ce2556682009d8aff837480f040a01e) ) + ROM_LOAD( "mm-203-405-s3.bin", 0x600000, 0x080000, CRC(e9747c8c) SHA1(2507102ec34755c6f110eadb3444e6d3a3474051) ) + ROM_LOAD16_BYTE( "mms1x2.u30.bin", 0x800001, 0x020000, CRC(b42b426f) SHA1(6aee5759b5f0786c5ee074d9df3d2716919ea621) ) + ROM_LOAD16_BYTE( "mms0x2.u29.bin", 0x800000, 0x020000, CRC(bd22b7d2) SHA1(ef82d00d72439590c71aed33ecfabc6ee71a6ff9) ) + + ROM_REGION( 0x200000, "gfx2", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "mm-300-406-a0.bin", 0x000000, 0x200000, CRC(b15f6b7f) SHA1(5e84919d788add53fc87f4d85f437df413b1dbc5) ) + + ROM_REGION( 0x200000, "gfx3", 0 ) /* Tiles (scrambled) */ + ROM_COPY("gfx2",0,0,0x200000) // it isn't on the board twice. + + ROM_REGION( 0x400000, "oki1", 0 ) /* Samples, plus room for expansion */ + ROM_LOAD( "mm-100-401-e0.bin", 0x000000, 0x100000, CRC(b9cbfbee) SHA1(051d48a68477ef9c29bd5cc0bb7955d513a0ab94) ) // 16 x $10000 + + ROM_REGION( 0x100000, "oki2", ROMREGION_ERASE00 ) /* Samples */ + /* Not present on this board */ +ROM_END + +/* The evolution and USA versions seem to be more like GTMR 1.5, they have some fairly significant changes */ + +/* This version displays: + + tb05mm-eu "1000 miglia" + master up= 94/09/06 14:49:19 */ + +ROM_START( gtmre ) + ROM_REGION( 0x100000, "gtmr", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "gmmu2.bin", 0x000000, 0x080000, CRC(36dc4aa9) SHA1(0aea4dc169d7aad2ea957a1de698d1fa12c71556) ) + ROM_LOAD16_BYTE( "gmmu1.bin", 0x000001, 0x080000, CRC(8653c144) SHA1(a253a01327a9443337a55a13c063ea5096444c4c) ) + + ROM_REGION( 0x020000, "mcudata", 0 ) /* MCU Code */ + //ROM_LOAD16_WORD_SWAP( "mcu_code.u12", 0x000000, 0x020000, NO_DUMP ) + // this rom has the right version string, so is probably correct + ROM_LOAD16_WORD_SWAP( "gtmrusa.u12", 0x000000, 0x020000, CRC(2e1a06ff) SHA1(475a7555653eefac84307492a385895b839cab0d) ) + + ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprites */ + /* fill the 0x700000-7fffff range first, with the second of the identical halves */ + ROM_LOAD16_BYTE( "gmmu64.bin", 0x600000, 0x100000, CRC(57d77b33) SHA1(f7ae28ae889be4442b7b236705943eaad1f0c84e) ) // HALVES IDENTICAL + ROM_LOAD16_BYTE( "gmmu65.bin", 0x600001, 0x100000, CRC(05b8bdca) SHA1(44471d66787d5b48ae8b13676f42f27af44e5c6a) ) // HALVES IDENTICAL + ROM_LOAD( "gmmu27.bin", 0x000000, 0x200000, CRC(c0ab3efc) SHA1(e6cd15480977b036234d91e6f3a6e21b7f0a3c3e) ) + ROM_LOAD( "gmmu28.bin", 0x200000, 0x200000, CRC(cf6b23dc) SHA1(ccfd0b17507e091e55c169361cd6a6b19641b717) ) + ROM_LOAD( "gmmu29.bin", 0x400000, 0x200000, CRC(8f27f5d3) SHA1(219a86446ce2556682009d8aff837480f040a01e) ) + ROM_LOAD( "gmmu30.bin", 0x600000, 0x080000, CRC(e9747c8c) SHA1(2507102ec34755c6f110eadb3444e6d3a3474051) ) + /* codes 6800-6fff are explicitly skipped */ + + ROM_REGION( 0x200000, "gfx2", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "gmmu52.bin", 0x000000, 0x200000, CRC(b15f6b7f) SHA1(5e84919d788add53fc87f4d85f437df413b1dbc5) ) + + ROM_REGION( 0x200000, "gfx3", 0 ) /* Tiles (scrambled) */ + ROM_COPY("gfx2",0,0,0x200000) // it isn't on the board twice. + + ROM_REGION( 0x400000, "oki1", 0 ) /* Samples, plus room for expansion */ + ROM_LOAD( "gmmu23.bin", 0x000000, 0x100000, CRC(b9cbfbee) SHA1(051d48a68477ef9c29bd5cc0bb7955d513a0ab94) ) // 16 x $10000 + + ROM_REGION( 0x100000, "oki2", 0 ) /* Samples */ + ROM_LOAD( "gmmu24.bin", 0x000000, 0x100000, CRC(380cdc7c) SHA1(ba7f51201b0f2bf15e66557e45bb2af5cf797779) ) // 2 x $40000 - HALVES IDENTICAL +ROM_END + + +/* This version displays: + + tb05mm-eu "1000 miglia" + master up= 94/09/06 20:30:39 */ + +ROM_START( gtmrusa ) + ROM_REGION( 0x100000, "gtmr", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "gtmrusa.u2", 0x000000, 0x080000, CRC(5be615c4) SHA1(c14d11a5bf6e025a65b932039165302ff407c4e1) ) + ROM_LOAD16_BYTE( "gtmrusa.u1", 0x000001, 0x080000, CRC(ae853e4e) SHA1(31eaa73b0c5ddab1292f521ceec43b202653efe9) ) + + ROM_REGION( 0x020000, "mcudata", 0 ) /* MCU Code? */ + ROM_LOAD16_WORD_SWAP( "gtmrusa.u12", 0x000000, 0x020000, CRC(2e1a06ff) SHA1(475a7555653eefac84307492a385895b839cab0d) ) + + ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprites */ + /* fill the 0x700000-7fffff range first, with the second of the identical halves */ + ROM_LOAD16_BYTE( "gmmu64.bin", 0x600000, 0x100000, CRC(57d77b33) SHA1(f7ae28ae889be4442b7b236705943eaad1f0c84e) ) // HALVES IDENTICAL + ROM_LOAD16_BYTE( "gmmu65.bin", 0x600001, 0x100000, CRC(05b8bdca) SHA1(44471d66787d5b48ae8b13676f42f27af44e5c6a) ) // HALVES IDENTICAL + ROM_LOAD( "gmmu27.bin", 0x000000, 0x200000, CRC(c0ab3efc) SHA1(e6cd15480977b036234d91e6f3a6e21b7f0a3c3e) ) + ROM_LOAD( "gmmu28.bin", 0x200000, 0x200000, CRC(cf6b23dc) SHA1(ccfd0b17507e091e55c169361cd6a6b19641b717) ) + ROM_LOAD( "gmmu29.bin", 0x400000, 0x200000, CRC(8f27f5d3) SHA1(219a86446ce2556682009d8aff837480f040a01e) ) + ROM_LOAD( "gmmu30.bin", 0x600000, 0x080000, CRC(e9747c8c) SHA1(2507102ec34755c6f110eadb3444e6d3a3474051) ) + /* codes 6800-6fff are explicitly skipped */ + + ROM_REGION( 0x200000, "gfx2", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "gmmu52.bin", 0x000000, 0x200000, CRC(b15f6b7f) SHA1(5e84919d788add53fc87f4d85f437df413b1dbc5) ) + + ROM_REGION( 0x200000, "gfx3", 0 ) /* Tiles (scrambled) */ + ROM_COPY("gfx2",0,0,0x200000) // it isn't on the board twice. + + ROM_REGION( 0x400000, "oki1", 0 ) /* Samples, plus room for expansion */ + ROM_LOAD( "gmmu23.bin", 0x000000, 0x100000, CRC(b9cbfbee) SHA1(051d48a68477ef9c29bd5cc0bb7955d513a0ab94) ) // 16 x $10000 + + ROM_REGION( 0x100000, "oki2", 0 ) /* Samples */ + ROM_LOAD( "gmmu24.bin", 0x000000, 0x100000, CRC(380cdc7c) SHA1(ba7f51201b0f2bf15e66557e45bb2af5cf797779) ) // 2 x $40000 - HALVES IDENTICAL +ROM_END + + +/*************************************************************************** + +Great 1000 Miles Rally 2 USA +Kaneko, 1995 + +PCB Layouts +----------- + +KANEKO AX-SYSTEM BOARD +M201F00584 KANEKO (sticker) +|------------------------------------------------------| +| PX4460 CNC1 | +|LA4461 M6295 6264 6264 | +| LPF6K M6295 PAL1 |----------| | +| PAL2 |KANEKO | | +| PAL3 |VIEW2-CHIP| CN3| +| |(QFP144) | | +| CNC2 | | | +| |----------| | +|J 6264 | +|A 6264 | +|M 62256 | +|M 62256 |----------| | +|A |KANEKO | | +| |VIEW2-CHIP| | +| MC1091 |(QFP144) | CN2| +| | | | +| CNA |----------| | +| 6264 | +| |----| 6264 |----------| | +| | *1 | 62256 |KANEKO | | +| |----| 62256 |KC-002 | | +| |---------------| |(QFP208) | | +| | 68000 | | | | +| | | |----------| | +| PAL4 |---------------|33.3333MHz 424260 | +| PAL5 PAL6 20MHz 424260 | +| PAL7 PAL8 | +|62256 PAL9 | +|62256 PAL10 | +| PAL11 | +| 27MHz 16MHz | +| CNB CN1 | +|------------------------------------------------------| +Notes: + 68000 - Toshiba TMP68HC000N-16 CPU running at 16.000MHz (SDIP64) + M6295 - Oki M6295 ADPCM Sample Player IC, clock 2.000MHz (both), sample rate = 2000000/165 (QFP44) + LA4461- Sanyo LA4461 12W Power Amplifier (SIP10, same as LA4460 but with reverse pinout) + LPF6K - KANEKO Custom Ceramic AD/DA Module (SIP7) + PX4460- KANEKO Custom Ceramic AD/DA Module (SIP5) + MC1091- KANEKO Custom Ceramic Input Module (ZIP46) + 6264 - Sony CXK5864CM-10LL 8k x8 SRAM (SOP28) + 62256 - Sony CXK58257ASP-70L 32k x8 SRAM (DIP28) + 424260- NEC 424260-80 256k x16 DRAM (SOJ40) + PAL1 - AMI 18CV8PC-25 stamped 'AX0P048' (DIP20) + PAL2 - AMI 18CV8PC-25 stamped 'AX0P049' (DIP20) + PAL3 - AMI 18CV8PC-25 stamped 'AX0P050' (DIP20) + PAL4 - AMI 18CV8PC-25 stamped 'AX0P021' (DIP20) + PAL5 - AMI 18CV8PC-25 stamped 'AX0P022' (DIP20) + PAL6 - AMI 18CV8PC-25 stamped 'AX0P070' (DIP20) + PAL7 - AMI 18CV8PC-25 stamped 'AX0P071' (DIP20) + PAL8 - AMI 18CV8PC-25 stamped 'AX0P089' (DIP20) + PAL9 - AMI 18CV8PC-25 stamped 'AX0P062' (DIP20) + PAL10 - AMI 18CV8PC-25 stamped 'AX0P063' (DIP20) + PAL11 - AMI 18CV8PC-25 stamped 'AX0P064' (DIP20) + CNC1/CNC2 \ + CNA/CNB | Multi-pin connectors joining top board to bottom board + CN1/2/3 / + Custom IC's - + KANEKO VIEW2-CHIP (x2, QFP144) + KANEKO KC-002 (QFP208) + *1 - KANEKO JAPAN 9448 TA (QFP44) + + +KANEKO AX-SYSTEM BOARD ROM-08 +AX09S00584 KANEKO (sticker) +|------------------------------------------------------| +| 93C46 SW1 CNB CN1 | +| |-------| EPROM.U31 SP_ROM0.U49 | +| |KANEKO | | +|CN4 |TBS0P02| EPROM.U32 SP_ROM1.U50 PAL8 | +| |(QFP74)| | +| |-------| EPROM.U33 SP_ROM2.U51 SP-ROM4.U85 | +| | +| PAL1 SP_ROM3.U52 SP-ROM5.U86 | +| PAL2 | +|PAL3 SP-ROM6.U87 | +|PAL4 | +| SP-ROM7.U88 | +|EPROM.U5 | +| 6116 | +|EPROM.U6 BG0_ROM0.U89| +| CNA 6116 | +|EPROM.U7 BG0_ROM1.U90| +| | +|EPROM.U8 BG1_ROM0.U93| +| | +| PAL5 BG1_ROM1.U94| +| PAL6 6116 PAL9 | +|UPC339C CN2| +|UPC339C 6116 BG2_ROM0.U91| +| | +|CNN3 CNC2 BG2_ROM1.U92| +| | +|CNN2 S2_ROM0.U47 S2_ROM1.U65 | +| BG2_ROM0.U96| +|CNN1 S1_ROM0.U48 S1_ROM1.U66 CN3| +| NE555 BG2_ROM1.U97| +|AD7820 CNC1 PAL7 | +|------------------------------------------------------| +Notes: + AD7820 - Analog Devices AD7820 Linear Compatible CMOS High Speed 8-Bit ADC with Track/Hold Function (DIP20) + 93C46 - Atmel 93C46 Serial EEPROM (DIP8) + 6116 - 2k x8 SRAM (DIP24) + NE555 - Texas Instruments NE555 General Purpose Single Bipolar Timer (DIP8) + UPC339C - NEC uPC339C Low Power Quad Comparator (DIP14) + PAL1 - Lattice GAL16V8B stamped 'COMUX2' (DIP20) + PAL2 - Lattice GAL16V8B stamped 'COMUX3' (DIP20) + PAL3 - AMI 18CV8PC-25 stamped 'COMUX1' (DIP20) + PAL4 - AMI 18CV8PC-25 stamped 'MMS4P004' (DIP20) + PAL5 - Lattice GAL16V8B stamped 'COMUX5' (DIP20) + PAL6 - Lattice GAL16V8B stamped 'COMUX4' (DIP20) + PAL7 - AMI 18CV8PC-25 stamped 'MMS4P067' (DIP20) + PAL8 - Lattice GAL16V8B stamped 'MMS4G084' (DIP20) + PAL9 - Lattice GAL16V8B stamped 'MMS4G095' (DIP20) + CNN1/2/3- Connectors for analog controls + CN4 - 16 Pin Flat Cable Connector + CNC1/CNC2 \ + CNA/CNB | Multi-pin connectors joining top board to bottom board + CN1/2/3 / + Custom IC - KANEKO TBS0P02 Custom Microcontroller (QFP74) + + ROMs - (Note: Not all ROM locations are populated on the above layout) + + Filename Device Type Use + ----------------------------------------------------- + M2P1A1.U7 27C040 (4M) \ 68000 Program + M2P0A1.U8 27C040 (4M) / + + M2D0X0.U31 27C010 (1M) MCU Program + + M2S0A1.U32 27C040 (4M) \ + M2S1A1.U33 27C040 (4M) | + M2-200-00.U49 32M MaskROM (42-Pin) | Sprites + M2-201-00.U50 16M MaskROM (42-Pin) | + M2-202-00.U51 16M MaskROM (42-Pin) / + + M2-300-00.U89 16M MaskROM (42-Pin) \ + M2-301-00.U90 16M MaskROM (42-Pin) | Tiles + M2B0X0.U93 27C010 (1M) | + M2B1X0.U94 27C010 (1M) / + + M2-100-00.U48 8M MASKROM (32-Pin) \ + M2W1A1.U47 27C040 (4M) / Oki Samples + +***************************************************************************/ + +ROM_START( gtmr2 ) + ROM_REGION( 0x100000, "gtmr", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "m2p0x1a.u8", 0x000000, 0x080000, CRC(c29039fb) SHA1(a16e8863608353c2931e9d45359fbcec8f11ef9d) ) + ROM_LOAD16_BYTE( "m2p1x1a.u7", 0x000001, 0x080000, CRC(8ef392c4) SHA1(06bd720d931911e32264183dd215ab70ad6d2961) ) + + ROM_REGION( 0x020000, "mcudata", 0 ) /* MCU Code? */ + ROM_LOAD16_WORD_SWAP( "m2d0x0.u31", 0x000000, 0x020000, CRC(2e1a06ff) SHA1(475a7555653eefac84307492a385895b839cab0d) ) + + ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD( "m2-200-0.u49", 0x000000, 0x400000, CRC(93aafc53) SHA1(1d28b6e3bd61ce9c938fc5303aeabcdefa549852) ) + ROM_LOAD( "m2-201-0.u50", 0x400000, 0x200000, CRC(39b60a83) SHA1(aa7b37c7c92bbcf685f4fec84cc6d8a77d26433c) ) + ROM_LOAD( "m2-202-0.u51", 0x600000, 0x200000, CRC(fd06b339) SHA1(5de0af7d23147f6eb403700eabd66794198f3641) ) + ROM_LOAD16_BYTE( "m2s0x1a.u32", 0x700000, 0x080000, CRC(a485eec6) SHA1(f8aff62daed95a63544106472a9ef34902feaaa2) ) + ROM_LOAD16_BYTE( "m2s1x1a.u33", 0x700001, 0x080000, CRC(c5b71bb2) SHA1(874e2a2e19cd8f916afa6fcf54169a8db035fe64) ) + + ROM_REGION( 0x440000, "gfx2", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "m2-300-0.u89", 0x000000, 0x200000, CRC(4dc42fbb) SHA1(f14c287bc60f561eb9a57db4e3390aae9a81c392) ) + ROM_LOAD( "m2-301-0.u90", 0x200000, 0x200000, CRC(f4e894f2) SHA1(1f983a1d93845fe298afba60d4dacdd1a10cab7f) ) + ROM_LOAD16_BYTE( "m2b0x0.u93", 0x400000, 0x020000, CRC(e023d51b) SHA1(3c9f591f3ca2ee8e1100b83ae8eb593e11e6eac7) ) + ROM_LOAD16_BYTE( "m2b1x0.u94", 0x400001, 0x020000, CRC(03c48bdb) SHA1(f5ba45d026530d46f760cf06d02a1ffcca89aa3c) ) + + ROM_REGION( 0x440000, "gfx3", 0 ) /* Tiles (scrambled) */ + ROM_COPY("gfx2",0,0,0x440000) // it isn't on the board twice. + + ROM_REGION( 0x400000, "oki1", 0 ) /* Samples, plus room for expansion */ + ROM_LOAD( "m2-100-0.u48", 0x000000, 0x100000, CRC(5250fa45) SHA1(b1ad4660906997faea0aa89866de01a0e9f2b61d) ) + + ROM_REGION( 0x080000, "oki2", 0 ) /* Samples */ + ROM_LOAD( "m2w1x0.u47", 0x040000, 0x040000, CRC(1b0513c5) SHA1(8c9ddef19297e1b39d900297005203b7ff28667e) ) +ROM_END + +ROM_START( gtmr2a ) + ROM_REGION( 0x100000, "gtmr", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "m2p0x1.u8", 0x000000, 0x080000, CRC(525f6618) SHA1(da8008cc7768b4e8c0091aa3ea21752d0ca33691) ) + ROM_LOAD16_BYTE( "m2p1x1.u7", 0x000001, 0x080000, CRC(914683e5) SHA1(dbb2140f7de86073647abc6e73ba739ea201dd30) ) + + ROM_REGION( 0x020000, "mcudata", 0 ) /* MCU Code? */ + ROM_LOAD16_WORD_SWAP( "m2d0x0.u31", 0x000000, 0x020000, CRC(2e1a06ff) SHA1(475a7555653eefac84307492a385895b839cab0d) ) + + ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD( "m2-200-0.u49", 0x000000, 0x400000, CRC(93aafc53) SHA1(1d28b6e3bd61ce9c938fc5303aeabcdefa549852) ) + ROM_LOAD( "m2-201-0.u50", 0x400000, 0x200000, CRC(39b60a83) SHA1(aa7b37c7c92bbcf685f4fec84cc6d8a77d26433c) ) + ROM_LOAD( "m2-202-0.u51", 0x600000, 0x200000, CRC(fd06b339) SHA1(5de0af7d23147f6eb403700eabd66794198f3641) ) + ROM_LOAD16_BYTE( "m2s0x1.u32", 0x700000, 0x080000, CRC(4069d6c7) SHA1(2ed1cbb7ebde8347e0359cd56ee3a0d4d42d551f) ) + ROM_LOAD16_BYTE( "m2s1x1.u33", 0x700001, 0x080000, CRC(c53fe269) SHA1(e6c485bbaea4b67f074b89e047f686f107805713) ) + + ROM_REGION( 0x440000, "gfx2", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "m2-300-0.u89", 0x000000, 0x200000, CRC(4dc42fbb) SHA1(f14c287bc60f561eb9a57db4e3390aae9a81c392) ) + ROM_LOAD( "m2-301-0.u90", 0x200000, 0x200000, CRC(f4e894f2) SHA1(1f983a1d93845fe298afba60d4dacdd1a10cab7f) ) + ROM_LOAD16_BYTE( "m2b0x0.u93", 0x400000, 0x020000, CRC(e023d51b) SHA1(3c9f591f3ca2ee8e1100b83ae8eb593e11e6eac7) ) + ROM_LOAD16_BYTE( "m2b1x0.u94", 0x400001, 0x020000, CRC(03c48bdb) SHA1(f5ba45d026530d46f760cf06d02a1ffcca89aa3c) ) + + ROM_REGION( 0x440000, "gfx3", 0 ) /* Tiles (scrambled) */ + ROM_COPY("gfx2",0,0,0x440000) // it isn't on the board twice. + + ROM_REGION( 0x400000, "oki1", 0 ) /* Samples, plus room for expansion */ + ROM_LOAD( "m2-100-0.u48", 0x000000, 0x100000, CRC(5250fa45) SHA1(b1ad4660906997faea0aa89866de01a0e9f2b61d) ) + + ROM_REGION( 0x080000, "oki2", 0 ) /* Samples */ + ROM_LOAD( "m2w1x0.u47", 0x040000, 0x040000, CRC(1b0513c5) SHA1(8c9ddef19297e1b39d900297005203b7ff28667e) ) +ROM_END + +ROM_START( gtmr2u ) + ROM_REGION( 0x100000, "gtmr", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "m2p0a1.u8", 0x000000, 0x080000, CRC(813e1d5e) SHA1(602df02933dc7b77be311113af1d1edad2751cc9) ) + ROM_LOAD16_BYTE( "m2p1a1.u7", 0x000001, 0x080000, CRC(bee63666) SHA1(07585a63f901f50f2a2314eb4dc4307e7028ded7) ) + + ROM_REGION( 0x020000, "mcudata", 0 ) /* MCU Code? */ + ROM_LOAD16_WORD_SWAP( "m2d0x0.u31", 0x000000, 0x020000, CRC(2e1a06ff) SHA1(475a7555653eefac84307492a385895b839cab0d) ) + + ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD( "m2-200-0.u49", 0x000000, 0x400000, CRC(93aafc53) SHA1(1d28b6e3bd61ce9c938fc5303aeabcdefa549852) ) + ROM_LOAD( "m2-201-0.u50", 0x400000, 0x200000, CRC(39b60a83) SHA1(aa7b37c7c92bbcf685f4fec84cc6d8a77d26433c) ) + ROM_LOAD( "m2-202-0.u51", 0x600000, 0x200000, CRC(fd06b339) SHA1(5de0af7d23147f6eb403700eabd66794198f3641) ) + ROM_LOAD16_BYTE( "m2s0a1.u32", 0x700000, 0x080000, CRC(98977171) SHA1(5b69462e07778b5bd1f5119cae6b63ede38cd642) ) + ROM_LOAD16_BYTE( "m2s1a1.u33", 0x700001, 0x080000, CRC(c69a732e) SHA1(810b333f442c0714f4cb8b4a73136d0b44443277) ) + + ROM_REGION( 0x440000, "gfx2", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "m2-300-0.u89", 0x000000, 0x200000, CRC(4dc42fbb) SHA1(f14c287bc60f561eb9a57db4e3390aae9a81c392) ) + ROM_LOAD( "m2-301-0.u90", 0x200000, 0x200000, CRC(f4e894f2) SHA1(1f983a1d93845fe298afba60d4dacdd1a10cab7f) ) + ROM_LOAD16_BYTE( "m2b0x0.u93", 0x400000, 0x020000, CRC(e023d51b) SHA1(3c9f591f3ca2ee8e1100b83ae8eb593e11e6eac7) ) + ROM_LOAD16_BYTE( "m2b1x0.u94", 0x400001, 0x020000, CRC(03c48bdb) SHA1(f5ba45d026530d46f760cf06d02a1ffcca89aa3c) ) + + ROM_REGION( 0x440000, "gfx3", 0 ) /* Tiles (scrambled) */ + ROM_COPY("gfx2",0,0,0x440000) // it isn't on the board twice. + + ROM_REGION( 0x400000, "oki1", 0 ) /* Samples, plus room for expansion */ + ROM_LOAD( "m2-100-0.u48", 0x000000, 0x100000, CRC(5250fa45) SHA1(b1ad4660906997faea0aa89866de01a0e9f2b61d) ) + + ROM_REGION( 0x080000, "oki2", 0 ) /* Samples */ + ROM_LOAD( "m2w1a1.u47", 0x000000, 0x080000, CRC(15f25342) SHA1(9947e66575738700345c12c104701b812c62ce03) ) +ROM_END + +/*************************************************************************** + + Magical Crystals + +(c)1991 Kaneko/Atlus +Z00FC-02 + +CPU : TMP68HC000N-12 +Sound: YM2149Fx2 M6295 +OSC : 16.0000MHz(X1) 12.0000MHz(X2) + +ROMs: +mc100j.u18 - Main programs +mc101j.u19 / + +mc000.u38 - Graphics (32pin mask) +mc001.u37 | (32pin mask) +mc002j.u36 / (27c010) + +mc010.u04 - Graphics (42pin mask) + +mc020.u33 - Graphics (42pin mask) + +mc030.u32 - Samples (32pin mask) + +PALs (18CV8PC): +u08, u20, u41, u42, u50, u51, u54 + +Custom chips: +KANEKO VU-001 046A (u53, 48pin PQFP) +KANEKO VU-002 052 151021 (u60, 160pin PQFP) +KANEKO 23160-509 9047EAI VIEW2-CHIP (u24 & u34, 144pin PQFP) +KANEKO MUX2-CHIP (u28, 64pin PQFP) +KANEKO IU-001 9045KP002 (u22, 44pin PQFP) +KANEKO I/O JAMMA MC-8282 047 (u5, 46pin) +699206p (u09, 44pin PQFP) +699205p (u10, 44pin PQFP) + +Other: +93C46 EEPROM + +DIP settings: +1: Flip screen +2: Test mode +3: Unused +4: Unused + +Yes, one program rom actually is a 27C010 and the other one is a 27C020 + +***************************************************************************/ + +ROM_START( mgcrystl ) /* Master Up: 92/01/10 14:21:30 */ + ROM_REGION( 0x040000*2, "maincpu", ROMREGION_ERASE ) /* 68000 Code */ + ROM_LOAD16_BYTE( "mc100e02.u18", 0x000000, 0x020000, CRC(246a1335) SHA1(8333945a92e08a7bff425d2d6602557386016dc5) ) /* Labeled as MC100E/U18-02 */ + ROM_LOAD16_BYTE( "mc101e02.u19", 0x000001, 0x040000, CRC(708ea1dc) SHA1(ae6eca6620729bc1e815f1bfbd8fe130f0ba943c) ) /* Labeled as MC101E/U19-02 */ + + ROM_REGION( 0x280000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD( "mc000.u38", 0x000000, 0x100000, CRC(28acf6f4) SHA1(6647ad90ea580b65ed28772f9d65352b06833d0c) ) + ROM_LOAD( "mc001.u37", 0x100000, 0x080000, CRC(005bc43d) SHA1(6f6cd99e8e60562fa86581008455a6d9d646fa95) ) + ROM_RELOAD( 0x180000, 0x080000 ) + ROM_LOAD( "mc002e02.u36", 0x200000, 0x020000, CRC(27ac1056) SHA1(34b07c1a0d403ca45c9849d3d8d311012f787df6) ) /* Labeled as MC002E/U36-02 */ + ROM_RELOAD( 0x220000, 0x020000 ) + ROM_RELOAD( 0x240000, 0x020000 ) + ROM_RELOAD( 0x260000, 0x020000 ) + + ROM_REGION( 0x100000, "gfx2", 0 ) /* Tiles (Scrambled) */ + ROM_LOAD( "mc010.u04", 0x000000, 0x100000, CRC(85072772) SHA1(25e903cc2c893d61db791d1fe60a1205a4395667) ) + + ROM_REGION( 0x100000, "gfx3", 0 ) /* Tiles (Scrambled) */ + ROM_LOAD( "mc020.u34", 0x000000, 0x100000, CRC(1ea92ff1) SHA1(66ec53e664b2a5a751a280a538aaeceafc187ceb) ) + + ROM_REGION( 0x040000, "oki", 0 ) /* Samples */ + ROM_LOAD( "mc030.u32", 0x000000, 0x040000, CRC(c165962e) SHA1(f7e130db387ae9dcb7223f7ad6e51270d3033bc9) ) +ROM_END + +ROM_START( mgcrystlo ) /* Master Up: 91/12/10 01:56:06 */ + ROM_REGION( 0x040000*2, "maincpu", ROMREGION_ERASE ) /* 68000 Code */ + ROM_LOAD16_BYTE( "mc100h00.u18", 0x000000, 0x020000, CRC(c7456ba7) SHA1(96c25c3432069373fa86d7af3e093e02e39aea34) ) /* Labeled as MC100H/U18-00 */ + ROM_LOAD16_BYTE( "mc101h00.u19", 0x000001, 0x040000, CRC(ea8f9300) SHA1(0cd0d448805aa45986b63befca00b08fe066dbb2) ) /* Labeled as MC101H/U19-00 */ + + ROM_REGION( 0x280000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD( "mc000.u38", 0x000000, 0x100000, CRC(28acf6f4) SHA1(6647ad90ea580b65ed28772f9d65352b06833d0c) ) + ROM_LOAD( "mc001.u37", 0x100000, 0x080000, CRC(005bc43d) SHA1(6f6cd99e8e60562fa86581008455a6d9d646fa95) ) + ROM_RELOAD( 0x180000, 0x080000 ) + ROM_LOAD( "mc002h00.u36", 0x200000, 0x020000, CRC(22729037) SHA1(de4e1bdab57aa617411b6327f3db4856970e8953) ) /* Labeled as MC002H/U36-00 */ + ROM_RELOAD( 0x220000, 0x020000 ) + ROM_RELOAD( 0x240000, 0x020000 ) + ROM_RELOAD( 0x260000, 0x020000 ) + + ROM_REGION( 0x100000, "gfx2", 0 ) /* Tiles (Scrambled) */ + ROM_LOAD( "mc010.u04", 0x000000, 0x100000, CRC(85072772) SHA1(25e903cc2c893d61db791d1fe60a1205a4395667) ) + + ROM_REGION( 0x100000, "gfx3", 0 ) /* Tiles (Scrambled) */ + ROM_LOAD( "mc020.u34", 0x000000, 0x100000, CRC(1ea92ff1) SHA1(66ec53e664b2a5a751a280a538aaeceafc187ceb) ) + + ROM_REGION( 0x040000, "oki", 0 ) /* Samples */ + ROM_LOAD( "mc030.u32", 0x000000, 0x040000, CRC(c165962e) SHA1(f7e130db387ae9dcb7223f7ad6e51270d3033bc9) ) +ROM_END + +ROM_START( mgcrystlj ) /* Master Up: 92/01/13 14:44:20 */ + ROM_REGION( 0x040000*2, "maincpu", ROMREGION_ERASE ) /* 68000 Code */ + ROM_LOAD16_BYTE( "mc100j02.u18", 0x000000, 0x020000, CRC(afe5882d) SHA1(176e6e12e3df63c08d7aff781f5e5a9bd83ec293) ) /* Labeled as MC100J/U18-02 */ + ROM_LOAD16_BYTE( "mc101j02.u19", 0x000001, 0x040000, CRC(60da5492) SHA1(82b90a617d355825624ce9fb30bddf4714bd0d18) ) /* Labeled as MC101J/U19-02 */ + + ROM_REGION( 0x280000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD( "mc000.u38", 0x000000, 0x100000, CRC(28acf6f4) SHA1(6647ad90ea580b65ed28772f9d65352b06833d0c) ) + ROM_LOAD( "mc001.u37", 0x100000, 0x080000, CRC(005bc43d) SHA1(6f6cd99e8e60562fa86581008455a6d9d646fa95) ) + ROM_RELOAD( 0x180000, 0x080000 ) + ROM_LOAD( "mc002e02.u36", 0x200000, 0x020000, CRC(27ac1056) SHA1(34b07c1a0d403ca45c9849d3d8d311012f787df6) ) /* Labeled as MC002J/U36-02, but same as MC002E/U36-02 */ + ROM_RELOAD( 0x220000, 0x020000 ) + ROM_RELOAD( 0x240000, 0x020000 ) + ROM_RELOAD( 0x260000, 0x020000 ) + + ROM_REGION( 0x100000, "gfx2", 0 ) /* Tiles (Scrambled) */ + ROM_LOAD( "mc010.u04", 0x000000, 0x100000, CRC(85072772) SHA1(25e903cc2c893d61db791d1fe60a1205a4395667) ) + + ROM_REGION( 0x100000, "gfx3", 0 ) /* Tiles (Scrambled) */ + ROM_LOAD( "mc020.u34", 0x000000, 0x100000, CRC(1ea92ff1) SHA1(66ec53e664b2a5a751a280a538aaeceafc187ceb) ) + + ROM_REGION( 0x040000, "oki", 0 ) /* Samples */ + ROM_LOAD( "mc030.u32", 0x000000, 0x040000, CRC(c165962e) SHA1(f7e130db387ae9dcb7223f7ad6e51270d3033bc9) ) +ROM_END + + + +/*************************************************************************** + +Shogun Warriors (Europe Rev.xx)(Kaneko 1992) + +Dumped from an original Kaneko PCB. Board No. Z01DK-002 / Serial FB92E01342. + Top board "Z05DP FOR Z01DK" + +Two Program roms are equal to the Japanese version. See Below: + +fb000e.u43 = fb001e.u43 Shogun Warriors <Note: Different label compared to Mame. +fb001e.u101 = fb000e.u42 Shogun Warriors <Note: Different label/position compared to Mame. +fb030e.u61 = fb030j.u61 Fujiyama Buster(Japan) <Note: Same as the Japanese version in Mame. +fb031e.u62 NO MATCH +fb040e.u33 = fb040j.u33 Fujiyama Buster (Japan) <Note: Same as the Japanese version in Mame. + + +The rom positions are equal to the Japanese version in Mame (Same Hardware revision). +The "e" suffix on the roms of "Shogun Warriors" that is previously +in Mame indicates that it is an European Version too, so this must be +an earlier or later European revision. + +Some hardware(custom chip) differences compared with the info in the Mame source: + +Fujiyama Buster(Japan) Shogun Warriors (Europe) (My Dump) + +KANEKO JAPAN 9152EV 175101 (160 Pin PQFP) = KANEKO JAPAN 9202EV 175071 (160 Pin PQFP) +KANEKO JAPAN 9203 T (44 PIN PQFP) = KANEKO JAPAN 9204 T (44 PIN PQFP) + +***************************************************************************/ + +ROM_START( shogwarr ) + ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "fb030e.u61", 0x000000, 0x020000, CRC(32ce7909) SHA1(02d87342706ac9547eb611bd542f8498ba41e34a) ) + ROM_LOAD16_BYTE( "fb031e.u62", 0x000001, 0x020000, CRC(228aeaf5) SHA1(5e080d7975bc5dcf6fccfbc286eafe939496d9bf) ) + + ROM_REGION( 0x020000, "cpu1", 0 ) /* MCU Code */ + ROM_LOAD( "fb040e.u33", 0x000000, 0x020000, CRC(299d0746) SHA1(67fe3a47ab01fa02ce2bb5836c2041986c19d875) ) + + ROM_REGION( 0x1000000, "gfx1", ROMREGION_ERASEFF ) /* Sprites */ + ROM_LOAD( "fb-020a.u1", 0x000000, 0x100000, CRC(87e55c6d) SHA1(87886c045d7c30b8dee3c8fb0bf8f2cdbc5fd7fb) ) + ROM_LOAD( "fb020b.u2", 0x100000, 0x100000, CRC(276b9d7b) SHA1(7a154f65b4737f2b6ac8effa3352711079f571dc) ) + ROM_LOAD( "fb021a.u3", 0x200000, 0x100000, CRC(7da15d37) SHA1(345cf2242e8210a697294a45197f2b3b974de885) ) + ROM_LOAD( "fb021b.u4", 0x300000, 0x100000, CRC(6a512d7b) SHA1(7fc3002d23262a9a590a283ea9e111e38d889ef2) ) + ROM_LOAD( "fb-22a.u5", 0x400000, 0x100000, CRC(9039e5d3) SHA1(222452cd7947f7c99c68e495835cca62e0449b5c) ) + ROM_LOAD( "fb-22b.u6", 0x500000, 0x100000, CRC(96ac9e54) SHA1(2b066375963dc57fe2ce89d65f6c0a9d183a838d) ) + ROM_LOAD( "fb023.u7", 0x600000, 0x100000, CRC(132794bd) SHA1(bcc73c3183c59a4b66f79d04774773b8a9239501) ) + + ROM_REGION( 0x400000, "gfx2", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "fb010.u65", 0x000000, 0x100000, CRC(296ffd92) SHA1(183a28e4594c428deb4726ed22d5166592b94b60) ) // 42 pin mask rom + ROM_LOAD( "fb011.u66", 0x100000, 0x080000, CRC(500a0367) SHA1(6dc5190f81b21f59ee56a3b2332c8d86d6599782) ) // 40 pin mask rom (verified correct) + + ROM_REGION( 0x100000, "oki1", 0 ) + ROM_LOAD( "fb001e.u43", 0x000000, 0x080000, CRC(f524aaa1) SHA1(006a886f9df2e57c51b61c6cea70a6574fc20304) ) + ROM_LOAD( "fb000e.u42", 0x080000, 0x080000, CRC(969f1465) SHA1(4f56d1ad341b08f4db41b7ab2498740612ff7c3d) ) + + ROM_REGION( 0x200000, "oki2", 0 ) + ROM_LOAD( "fb-002.u45", 0x000000, 0x100000, CRC(010acc17) SHA1(2dc0897c7778eacf6bce12ff0adbadb307ea6c17) ) + ROM_LOAD( "fb-003.u44", 0x100000, 0x100000, CRC(0aea4ac5) SHA1(8f3b30e505b0ba51c140a0a2c071680d4fa05db9) ) +ROM_END + +/*************************************************************************** + + Shogun Warriors + +Shogun Warriors, Kaneko 1992 + + fb010.u65 fb040.u33 + fb011.u66 + rb012.u67 + rb013.u68 + + fb001.u43 + 68000-12 fb000.u42 m6295 + 51257 fb030.u61 fb002.u44 m6295 + 51257 fb031.u62 fb003.u45 + + + fb021a.u3 + fb021b.u4 + fb022a.u5 + fb023.u7 fb022b.u6 + fb020a.u1 fb020b.u2 + + + +--------------------------------------------------------------------------- + Game code +--------------------------------------------------------------------------- + +102e04-7 <- !b80004-7 +102e18.w -> $800000 +102e1c.w -> $800002 , $800006 +102e1a.w -> $800004 +102e20.w -> $800008 + +ROUTINES: + +6622 print ($600000) + +***************************************************************************/ + + +// the 'green garbage' on the VS logo shown in the video ( http://www.youtube.com/watch?v=lz4gY9d7uxw ) doesn't happen on the real PCB, +// it appears to be an encoding artifact on the videos uploaded by this poster + +ROM_START( shogwarru ) + ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "fb030a.u61", 0x000000, 0x020000, CRC(a04106c6) SHA1(95ab084f2e709be7cec2964cb09bcf5a8d3aacdf) ) + ROM_LOAD16_BYTE( "fb031a.u62", 0x000001, 0x020000, CRC(d1def5e2) SHA1(f442de4433547e52b483549aca5786e4597a7122) ) + + ROM_REGION( 0x020000, "cpu1", 0 ) /* MCU Code */ + ROM_LOAD( "fb040a.u33", 0x000000, 0x020000, CRC(4b62c4d9) SHA1(35c943dde70438a411714070e42a84366db5ef83) ) + + ROM_REGION( 0x1000000, "gfx1", ROMREGION_ERASEFF ) /* Sprites */ + ROM_LOAD( "fb-020a.u1", 0x000000, 0x100000, CRC(87e55c6d) SHA1(87886c045d7c30b8dee3c8fb0bf8f2cdbc5fd7fb) ) + ROM_LOAD( "fb020b.u2", 0x100000, 0x100000, CRC(276b9d7b) SHA1(7a154f65b4737f2b6ac8effa3352711079f571dc) ) + ROM_LOAD( "fb021a.u3", 0x200000, 0x100000, CRC(7da15d37) SHA1(345cf2242e8210a697294a45197f2b3b974de885) ) + ROM_LOAD( "fb021b.u4", 0x300000, 0x100000, CRC(6a512d7b) SHA1(7fc3002d23262a9a590a283ea9e111e38d889ef2) ) + ROM_LOAD( "fb-22a.u5", 0x400000, 0x100000, CRC(9039e5d3) SHA1(222452cd7947f7c99c68e495835cca62e0449b5c) ) + ROM_LOAD( "fb-22b.u6", 0x500000, 0x100000, CRC(96ac9e54) SHA1(2b066375963dc57fe2ce89d65f6c0a9d183a838d) ) + ROM_LOAD( "fb023.u7", 0x600000, 0x100000, CRC(132794bd) SHA1(bcc73c3183c59a4b66f79d04774773b8a9239501) ) + + ROM_REGION( 0x400000, "gfx2", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "fb010.u65", 0x000000, 0x100000, CRC(296ffd92) SHA1(183a28e4594c428deb4726ed22d5166592b94b60) ) // 42 pin mask rom + ROM_LOAD( "fb011.u66", 0x100000, 0x080000, CRC(500a0367) SHA1(6dc5190f81b21f59ee56a3b2332c8d86d6599782) ) // 40 pin mask rom (verified correct) + + ROM_REGION( 0x100000, "oki1", 0 ) + ROM_LOAD( "fb001e.u43", 0x000000, 0x080000, CRC(f524aaa1) SHA1(006a886f9df2e57c51b61c6cea70a6574fc20304) ) + ROM_LOAD( "fb000e.u42", 0x080000, 0x080000, CRC(969f1465) SHA1(4f56d1ad341b08f4db41b7ab2498740612ff7c3d) ) + + ROM_REGION( 0x200000, "oki2", 0 ) + ROM_LOAD( "fb-002.u45", 0x000000, 0x100000, CRC(010acc17) SHA1(2dc0897c7778eacf6bce12ff0adbadb307ea6c17) ) + ROM_LOAD( "fb-003.u44", 0x100000, 0x100000, CRC(0aea4ac5) SHA1(8f3b30e505b0ba51c140a0a2c071680d4fa05db9) ) +ROM_END + +/*************************************************************************** + + Fujiyama Buster + +Japan (c) 1992 Kaneko +This is the Japanese version of Shogun Warriors + +Main PCB No: ZO1DK-002 (Same as B.Rap Boys) + ROM PCB No: ZO5DP + CPU: TMP68HC000N-12 (Toshiba) + SND: OKI M6295 x 2 + OSC: 16.000MHz, 12.000MHz + DIP: 1 x 8 POSITION + +OTHER: +93C46 (8 Pin DIP, EEPROM, Linked to FB-040.U33 & CALC3 Chip) +KANEKO JAPAN 9152EV 175101 (160 Pin PQFP) +KANEKO VIEW2-CHIP (144 Pin PQFP) +KANEKO MUX2-CHIP (64 Pin PQFP) +KANEKO CALC3 508 (74 Pin PQFP, NEC uPD78322 MCU, Linked to FB-040.U33) +KANEKO JAPAN 9203 T (44 PIN PQFP) + +Differences from Shogun Warriors: + +File Name CRC32 Labelled As ROM Type +=============================================== +fb030j.u61 0x32ce7909 FB030J/U61-00 27C010 | 68000 CPU Code +fb031j.u62 0x000c8c08 FB031J/U62-00 27C010 / + +fb040j.u33 0x299d0746 FB040J/U33-00 27C010 - MCU Code? 68000 Code snipets?? + +fb000j.u43 0xa7522555 FB000J/U43-00 27C040 | Japanese Sound Samples +fb001j_u.101 0x07d4e8e2 FB001J/U101-0 27C040 / + +NOTE: U67 & U68 are empty on this Original board. + +***************************************************************************/ + +ROM_START( fjbuster ) // Fujiyama Buster - Japan version of Shogun Warriors + ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "fb030j.u61", 0x000000, 0x020000, CRC(32ce7909) SHA1(02d87342706ac9547eb611bd542f8498ba41e34a) ) + ROM_LOAD16_BYTE( "fb031j.u62", 0x000001, 0x020000, CRC(000c8c08) SHA1(439daac1541c34557b5a4308ed69dfebb93abe13) ) + + ROM_REGION( 0x020000, "cpu1", 0 ) /* MCU Code */ + ROM_LOAD( "fb040j.u33", 0x000000, 0x020000, CRC(299d0746) SHA1(67fe3a47ab01fa02ce2bb5836c2041986c19d875) ) + + ROM_REGION( 0x1000000, "gfx1", ROMREGION_ERASEFF ) /* Sprites */ + ROM_LOAD( "fb-020a.u1", 0x000000, 0x100000, CRC(87e55c6d) SHA1(87886c045d7c30b8dee3c8fb0bf8f2cdbc5fd7fb) ) + ROM_LOAD( "fb020b.u2", 0x100000, 0x100000, CRC(276b9d7b) SHA1(7a154f65b4737f2b6ac8effa3352711079f571dc) ) + ROM_LOAD( "fb021a.u3", 0x200000, 0x100000, CRC(7da15d37) SHA1(345cf2242e8210a697294a45197f2b3b974de885) ) + ROM_LOAD( "fb021b.u4", 0x300000, 0x100000, CRC(6a512d7b) SHA1(7fc3002d23262a9a590a283ea9e111e38d889ef2) ) + ROM_LOAD( "fb-22a.u5", 0x400000, 0x100000, CRC(9039e5d3) SHA1(222452cd7947f7c99c68e495835cca62e0449b5c) ) + ROM_LOAD( "fb-22b.u6", 0x500000, 0x100000, CRC(96ac9e54) SHA1(2b066375963dc57fe2ce89d65f6c0a9d183a838d) ) + ROM_LOAD( "fb023.u7", 0x600000, 0x100000, CRC(132794bd) SHA1(bcc73c3183c59a4b66f79d04774773b8a9239501) ) + + ROM_REGION( 0x400000, "gfx2", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "fb010.u65", 0x000000, 0x100000, CRC(296ffd92) SHA1(183a28e4594c428deb4726ed22d5166592b94b60) ) // 42 pin mask rom + ROM_LOAD( "fb011.u66", 0x100000, 0x080000, CRC(500a0367) SHA1(6dc5190f81b21f59ee56a3b2332c8d86d6599782) ) // 40 pin mask rom (verified correct) + + ROM_REGION( 0x100000, "oki1", 0 ) + ROM_LOAD( "fb000j.u43", 0x000000, 0x080000, CRC(a7522555) SHA1(ea88d90dda20bc309f98a1924c41551e7708e6af) ) + ROM_LOAD( "fb001j_u.101", 0x080000, 0x080000, CRC(07d4e8e2) SHA1(0de911f452ddeb54b0b435b9c1cf5d5881175d44) ) + + ROM_REGION( 0x200000, "oki2", 0 ) + ROM_LOAD( "fb-002.u45", 0x000000, 0x100000, CRC(010acc17) SHA1(2dc0897c7778eacf6bce12ff0adbadb307ea6c17) ) + ROM_LOAD( "fb-003.u44", 0x100000, 0x100000, CRC(0aea4ac5) SHA1(8f3b30e505b0ba51c140a0a2c071680d4fa05db9) ) +ROM_END + +/*************************************************************************** + + B.Rap Boys + +B.Rap Boys +Kaneko, 1992 + +Game is a beat-em up, where a bunch of rapping boys (The B.Rap Boys) beats +up anyone and anything that gets in their way, smashing shop windows +and other property with their fists, chairs, wooden bats and whatever else +they can lay their hands on! + + +Main PCB No: ZO1DK-002 +ROM PCB No: ZO1DK-EXROM +CPU: TMP68HC000N-12 @ 12.000MHz +SND: OKI M6295 x 2 @ 2.000MHz [16/8]. Pin 7 is low. +OSC: 16.000MHz, 12.000MHz +DIP: 1 x 8 POSITION +SW1 - PCB location for 2 position DIP but location is unpopulated. +SW2: + + 1 2 3 4 5 6 7 8 +SCREEN FLIP NORMAL OFF + FLIP ON +MODE NORMAL OFF + TEST ON +SWITCH TEST [1] NO OFF + YES ON +POSITION #4 NOT USED OFF +COIN TYPE LOCAL COIN OFF + COMMON COIN ON +GAME TYPE 3 PLAYERS OFF + 2 PLAYERS ON +DIFFICULTY [2] EASY ON OFF + NORMAL OFF OFF + HARD OFF ON + VERY HARD ON ON + +[1] This additional test becomes available in test mode when this DIP is ON. +[2] Additional settings available in test mode via another on-screen menu. +Some text is written in Japanese. See scan in archive for details. + +Control is via 8 Way Joystick and 2 buttons + +There are two extra pin connectors near the JAMMA connector. +Pinouts are.... + +(A) +10 3P START SW + 9 3P COIN SW + 8 3P BUTTON 2 + 7 3P BUTTON 1 + 6 3P UP + 5 3P DOWN + 4 3P LEFT + 3 3P RIGHT + 2 GND + 1 GND + +(B) +6 COIN COUNTER 3 +5 COIN LOCKOUT 3 +4 TOTAL COIN COUNTER +3 NC +2 NC +1 NC + +RAM: +M5M4464 x 6, M51257AL x 2, KM6264BLS x 2, D42101C x 2, LH5116D x 2, CAT71C256 x 2 + +OTHER: +93C46 (8 PIN DIP, EEPROM, LINKED TO RB-006.U33) +KANEKO JAPAN 9152EV 175101 (160 PIN PQFP) +KANEKO VIEW2-CHIP (144 PIN PQFP) +KANEKO MUX2-CHIP (64 PIN PQFP) +KANEKO CALC3 508 (74 PIN PQFP, NEC uPD78322 MCU, LINKED TO RB-006.U33) +KANEKO JAPAN 9204 T (44 PIN PQFP) +PALs (x 11, read protected, not dumped) + +VSync is 59.1854Hz +HSync is 15.625kHz + +ROMs: +RB-004.U61 27C010 \ Main program +RB-005.U62 27C010 / + +RB-000.U43 2M mask \ +RB-001.U44 4M mask | Located near main program and OKI M6295 chips +RB-002.U45 4M mask | Possibly sound related / OKI Samples etc.. +RB-003.101 4M mask / + +RB-006.U33 27C010 MCU program? (Linked to CALC3 508) + +RB-010.U65 8M mask \ +RB-011.U66 8M mask | GFX +RB-012.U67 8M mask | +RB-013.U68 8M mask / + +RB-021.U76 4M mask \ +RB-022.U77 4M mask | +RB-023.U78 4M mask | GFX (located under a plug-in ROM PCB) +RB-024.U79 4M mask / + +RB-020.U2 4M mask \ +RB-025.U4 27C040 | GFX (located on a plug-in ROM PCB) +RB-026.U5 27C040 / + + +----- + +Game can be ROM Swapped onto a Shogun Warriors board and works + +***************************************************************************/ + + +ROM_START( brapboys ) /* Single PCB, fully populated, no rom sub board */ + ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "rb-030.u61", 0x000000, 0x020000, CRC(ccbe9a53) SHA1(b96baf0ecbf6550bfaf8e512d9275c53a3928bee) ) + ROM_LOAD16_BYTE( "rb-031.u62", 0x000001, 0x020000, CRC(c72b8dda) SHA1(450e1fb8acb140fa0ab23630daad82924f7ce72b) ) + + ROM_REGION( 0x020000, "cpu1", 0 ) /* MCU Code */ + ROM_LOAD( "rb-040.u33", 0x000000, 0x020000, CRC(757c6e19) SHA1(0f1c37b1b1eb6b230c593e4648c4302f413a61f5) ) + + ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD( "rb-020.c2", 0x000000, 0x100000, CRC(ce220d38) SHA1(b88d7c89a3e1a826bf19a1fa692ec77c944596d9) ) + ROM_LOAD( "rb-021.u76", 0x100000, 0x100000, CRC(74001407) SHA1(90002056ceb4e0401246950b8c3f996af0a2463c) ) + ROM_LOAD( "rb-022.u77", 0x200000, 0x100000, CRC(cb3f42dc) SHA1(5415f15621924dd263b8fe7daaf3dc25d470b814) ) + ROM_LOAD( "rb-023.u78", 0x300000, 0x100000, CRC(0e6530c5) SHA1(72bff46f0672927e540f4f3546ae533dd0a231e0) ) + ROM_LOAD( "rb-024.u79", 0x400000, 0x080000, CRC(65fa6447) SHA1(551e540d7bf412753b4a7098e25e6f9d8774bcf4) ) // correct, both halves identical when dumped as larger + ROM_LOAD( "rb-025.u80", 0x500000, 0x040000, CRC(36cd6b90) SHA1(45c50f2652726ded67c9c24185a71a6367e09270) ) // eprom, contains title logo for this version + + ROM_REGION( 0x400000, "gfx2", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "rb-010.u65", 0x000000, 0x100000, CRC(ffd73f87) SHA1(1a661f71976be61c22d9b962850e738ba17f1d45) ) + ROM_LOAD( "rb-011.u66", 0x100000, 0x100000, CRC(d9325f78) SHA1(346832608664aa8f3ac9260a549903386b4125a8) ) + ROM_LOAD( "rb-012.u67", 0x200000, 0x100000, CRC(bfdbe0d1) SHA1(3abc5398ee8ee1871b4d081f9b748539d69bcdba) ) + ROM_LOAD( "rb-013.u68", 0x300000, 0x100000, CRC(28c37fe8) SHA1(e10dd1a810983077328b44e6e33ce2e899c506d2) ) + + ROM_REGION( 0x100000, "oki1", 0 ) + ROM_LOAD( "rb-000.u43", 0x000000, 0x080000, CRC(58ad1a62) SHA1(1d2643b5f6eac22682972a88d284e00de3e3b223) ) + ROM_LOAD( "rb-003.101", 0x080000, 0x080000, CRC(2cac25d7) SHA1(0412c317bf650a93051b9304d23035efde0c026a) ) + + ROM_REGION( 0x200000, "oki2", 0 ) + ROM_LOAD( "rb-001.u44", 0x000000, 0x100000, CRC(7cf774b3) SHA1(3fb0a5096ce9480f97e311439042eb8cbc26efb4) ) + ROM_LOAD( "rb-002.u45", 0x100000, 0x100000, CRC(e4b30444) SHA1(be6756dce3721226e0b7f5d4d168008c31aeea8e) ) +ROM_END + + +ROM_START( brapboysj ) /* The Japanese version has an extra rom??? and used a rom sub board */ + ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "rb-004.u61", 0x000000, 0x020000, CRC(5432442c) SHA1(f0f7328ece96ef25e6d4fd1958d734f64a9ef371) ) + ROM_LOAD16_BYTE( "rb-005.u62", 0x000001, 0x020000, CRC(118b3cfb) SHA1(1690ecf5c629879bd97131ff77029e152919e45d) ) + + ROM_REGION( 0x020000, "cpu1", 0 ) /* MCU Code */ + ROM_LOAD( "rb-006.u33", 0x000000, 0x020000, CRC(f1d76b20) SHA1(c571b5f28e529589ee2d7697ef5d4b60ccb66e7a) ) + + ROM_REGION( 0x1000000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD( "rb-020.c2", 0x000000, 0x100000, CRC(ce220d38) SHA1(b88d7c89a3e1a826bf19a1fa692ec77c944596d9) ) + ROM_LOAD( "rb-021.u76", 0x100000, 0x100000, CRC(74001407) SHA1(90002056ceb4e0401246950b8c3f996af0a2463c) ) + ROM_LOAD( "rb-022.u77", 0x200000, 0x100000, CRC(cb3f42dc) SHA1(5415f15621924dd263b8fe7daaf3dc25d470b814) ) + ROM_LOAD( "rb-023.u78", 0x300000, 0x100000, CRC(0e6530c5) SHA1(72bff46f0672927e540f4f3546ae533dd0a231e0) ) + ROM_LOAD( "rb-024.u79", 0x400000, 0x080000, CRC(65fa6447) SHA1(551e540d7bf412753b4a7098e25e6f9d8774bcf4) ) // correct, both halves identical when dumped as larger + ROM_LOAD( "rb-025.u4", 0x500000, 0x080000, CRC(aa795ba5) SHA1(c5256dcceded2e76f548b60c18e51d0dd0209d81) ) // eprom, special title screen + ROM_LOAD( "rb-026.u5", 0x580000, 0x080000, CRC(bb7604d4) SHA1(57d51ce4ea2000f9a50bae326cfcb66ec494249f) ) // eprom, logs that bounce past + + ROM_REGION( 0x400000, "gfx2", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "rb-010.u65", 0x000000, 0x100000, CRC(ffd73f87) SHA1(1a661f71976be61c22d9b962850e738ba17f1d45) ) + ROM_LOAD( "rb-011.u66", 0x100000, 0x100000, CRC(d9325f78) SHA1(346832608664aa8f3ac9260a549903386b4125a8) ) + ROM_LOAD( "rb-012.u67", 0x200000, 0x100000, CRC(bfdbe0d1) SHA1(3abc5398ee8ee1871b4d081f9b748539d69bcdba) ) + ROM_LOAD( "rb-013.u68", 0x300000, 0x100000, CRC(28c37fe8) SHA1(e10dd1a810983077328b44e6e33ce2e899c506d2) ) + + ROM_REGION( 0x100000, "oki1", 0 ) + ROM_LOAD( "rb-000.u43", 0x000000, 0x080000, CRC(58ad1a62) SHA1(1d2643b5f6eac22682972a88d284e00de3e3b223) ) + ROM_LOAD( "rb-003.101", 0x080000, 0x080000, CRC(2cac25d7) SHA1(0412c317bf650a93051b9304d23035efde0c026a) ) + + ROM_REGION( 0x200000, "oki2", 0 ) + ROM_LOAD( "rb-001.u44", 0x000000, 0x100000, CRC(7cf774b3) SHA1(3fb0a5096ce9480f97e311439042eb8cbc26efb4) ) + ROM_LOAD( "rb-002.u45", 0x100000, 0x100000, CRC(e4b30444) SHA1(be6756dce3721226e0b7f5d4d168008c31aeea8e) ) +ROM_END + +/********************************************************************** + + Bonk's Adventure + +Bonk's Adventure +Kaneko, 1994 + +PCB Layout +---------- + +Z09AF-003 +|--------------------------------------------------------| +| LA4460 PC604109.101 PAL 3664 3664 PC500105.55 | +| M6295 PC603108.102 PAL | +| M6295 PC602107.100 PAL VIEW2-CHIP | +| PC601106.99 PAL | +| PC400104.51 | +| 3664 3664 | +| 62256 | +|J KANEKO 62256 VIEW2-CHIP | +|A JAPAN | +|M 9203T 424260 | +|M | +|A 62256 62256 6116 | +| PRG.7 PRG.8 6116 KANEKO 424260 | +| 3364 KC-002 PAL | +| 62256 68000 3364 | +| 62256 | +| PAL PAL 20MHz | +| PAL PAL 16MHz PC600106.42 | +| PAL PC700107.43 | +| MCU.124 PC200102.40 | +| DSW(8) KANEKO 93C46 PC100101.37 PC300103.38 | +| TBSOP01 27MHz 33.3333MHz | +|--------------------------------------------------------| + +Notes: + 68000 clock: 16.000MHz + M6295 clock: 2.000MHz, Sample Rate: /165 (both) + VSync: 60Hz + HSync: 15.625kHz + + PC100-PC500: 16M MASK + PC601-PC604: 8M MASK + PC600-PC700: 27C4001 + PRG's: 27C4001 + MCU : 27C010 + +**********************************************************************/ + +ROM_START( bonkadv ) + ROM_REGION( 0x100000, "gtmr", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "prg.8", 0x000000, 0x080000, CRC(af2e60f8) SHA1(406f79e155d1244b84f8c89c25b37188e1b4f4a6) ) + ROM_LOAD16_BYTE( "prg.7", 0x000001, 0x080000, CRC(a1cc6a78) SHA1(a9cea21a6a0dfd3b0952664681c057190aa27f8c) ) + + ROM_REGION( 0x020000, "mcudata", 0 ) /* MCU Code */ + ROM_LOAD16_WORD_SWAP( "mcu.124", 0x000000, 0x020000, CRC(9d4e2724) SHA1(9dd43703265e39f876877020a0ac3875de6faa8d) ) + + ROM_REGION( 0x500000, "gfx1", 0 ) /* Sprites */ + ROM_LOAD( "pc100101.37", 0x000000, 0x200000, CRC(c96e7c10) SHA1(607cc7745abc3ff820047e8a00060ece61646623) ) + ROM_LOAD( "pc200102.40", 0x200000, 0x100000, CRC(c2b7a26a) SHA1(1c8783442e0ccf30c5640866c5493f1dc1dd48f8) ) + ROM_LOAD( "pc300103.38", 0x300000, 0x100000, CRC(51ee162c) SHA1(b33afc7d1e9f55f191e08472e8c51ca931b0389d) ) + ROM_LOAD16_BYTE( "pc600106.42", 0x400000, 0x080000, CRC(25877026) SHA1(96814d97e9f9284f98c35edfe5e76677ac50dd97) ) + ROM_LOAD16_BYTE( "pc700107.43", 0x400001, 0x080000, CRC(bfe21c44) SHA1(9900a6fe4182b720a90d64d368bd0fd08bf936a8) ) + + ROM_REGION( 0x200000, "gfx2", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "pc400104.51", 0x000000, 0x100000, CRC(3b176f84) SHA1(0ad6fd5f03d275165490881173bafcb0a94762eb) ) + + ROM_REGION( 0x200000, "gfx3", 0 ) /* Tiles (scrambled) */ + ROM_LOAD( "pc500105.55", 0x000000, 0x100000, CRC(bebb3edc) SHA1(e0fed4307316deaeb811ec29f5022adeaf577a95) ) + + ROM_REGION( 0x400000, "oki1", 0 ) /* Samples, plus room for expansion */ + ROM_LOAD( "pc604109.101", 0x000000, 0x100000, CRC(76025530) SHA1(e0c8192d783057798eea084aa3e87938f6e01cb7) ) + + ROM_REGION( 0x300000, "oki2", 0 ) /* Samples */ + ROM_LOAD( "pc601106.99", 0x000000, 0x100000, CRC(a893651c) SHA1(d221ce89f19a76be497724f6c16fab82c8a52661) ) + ROM_LOAD( "pc602107.100", 0x100000, 0x100000, CRC(0fbb23aa) SHA1(69b620375c65246317d7105fbc414f3c36e02b2c) ) + ROM_LOAD( "pc603108.102", 0x200000, 0x100000, CRC(58458985) SHA1(9a846d604ba901eb2a59d2b6cd9c42e3b43adb6a) ) +ROM_END + +static DRIVER_INIT( bloodwar ) +{ + kaneko16_state *state = machine.driver_data<kaneko16_state>(); + machine.device<nvram_device>("nvram")->set_base(state->m_nvram_save, sizeof(state->m_nvram_save)); + DRIVER_INIT_CALL(samplebank); + DRIVER_INIT_CALL(decrypt_toybox_rom); +} + +static DRIVER_INIT( gtmr2 ) +{ + kaneko16_state *state = machine.driver_data<kaneko16_state>(); + machine.device<nvram_device>("nvram")->set_base(state->m_nvram_save, sizeof(state->m_nvram_save)); + DRIVER_INIT_CALL(samplebank); + DRIVER_INIT_CALL(decrypt_toybox_rom_alt); +} + +static DRIVER_INIT( calc3 ) +{ + DRIVER_INIT_CALL(calc3_scantables); + + DRIVER_INIT_CALL(kaneko16); + // MCU is a 78K series III type CPU +} + + +static DRIVER_INIT( shogwarr ) +{ + // default sample banks + kaneko16_common_oki_bank_w(machine, "bank10", "oki1", 0, 0x30000, 0x10000); + kaneko16_common_oki_bank_w(machine, "bank11", "oki2", 0, 0x00000, 0x40000); + + DRIVER_INIT_CALL(calc3); +} + + +static DRIVER_INIT( brapboys ) +{ + // sample banking is different on brap boys for the music, why? GALs / PALs ? + machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0xe00000, 0xe00001, FUNC(brapboys_oki_bank_w)); + + // default sample banks + kaneko16_common_oki_bank_w(machine, "bank10", "oki1", 0, 0x30000, 0x10000); + kaneko16_common_oki_bank_w(machine, "bank11", "oki2", 0, 0x20000, 0x20000); + + DRIVER_INIT_CALL(calc3); +} + + +/*************************************************************************** + + + Game drivers + + +***************************************************************************/ + +/* Working games */ +GAME( 1991, berlwall, 0, berlwall, berlwall, berlwall, ROT0, "Kaneko", "The Berlin Wall", 0 ) +GAME( 1991, berlwallt,berlwall, berlwall, berlwalt, berlwall, ROT0, "Kaneko", "The Berlin Wall (bootleg ?)", 0 ) +GAME( 1991, mgcrystl, 0, mgcrystl, mgcrystl, kaneko16, ROT0, "Kaneko", "Magical Crystals (World, 92/01/10)", 0 ) +GAME( 1991, mgcrystlo,mgcrystl, mgcrystl, mgcrystl, kaneko16, ROT0, "Kaneko", "Magical Crystals (World, 91/12/10)", 0 ) +GAME( 1991, mgcrystlj,mgcrystl, mgcrystl, mgcrystl, kaneko16, ROT0, "Kaneko (Atlus license)", "Magical Crystals (Japan, 92/01/13)", 0 ) +GAME( 1992, blazeon, 0, blazeon, blazeon, kaneko16, ROT0, "Atlus", "Blaze On (Japan)", 0 ) +GAME( 1992, explbrkr, 0, bakubrkr, bakubrkr, kaneko16, ROT90, "Kaneko", "Explosive Breaker", 0 ) +GAME( 1992, bakubrkr, explbrkr, bakubrkr, bakubrkr, kaneko16, ROT90, "Kaneko", "Bakuretsu Breaker", 0 ) +GAME( 1994, bonkadv, 0, bonkadv , bonkadv, bloodwar, ROT0, "Kaneko", "B.C. Kid / Bonk's Adventure / Kyukyoku!! PC Genjin", 0 ) +GAME( 1994, bloodwar, 0, bloodwar, bloodwar, bloodwar, ROT0, "Kaneko", "Blood Warrior", 0 ) +GAME( 1994, oedfight, bloodwar, bloodwar, bloodwar, bloodwar, ROT0, "Kaneko", "Oedo Fight (Japan Bloodshed Ver.)", 0 ) +GAME( 1994, gtmr, 0, gtmr, gtmr, bloodwar, ROT0, "Kaneko", "1000 Miglia: Great 1000 Miles Rally (94/07/18)", 0 ) +GAME( 1994, gtmra, gtmr, gtmr, gtmr, bloodwar, ROT0, "Kaneko", "1000 Miglia: Great 1000 Miles Rally (94/06/13)", 0 ) +GAME( 1994, gtmre, gtmr, gtmr, gtmr, gtmr2, ROT0, "Kaneko", "Great 1000 Miles Rally: Evolution Model!!! (94/09/06)", 0 ) +GAME( 1994, gtmrusa, gtmr, gtmr, gtmr, gtmr2, ROT0, "Kaneko", "Great 1000 Miles Rally: U.S.A Version! (94/09/06)", 0 ) // U.S.A version seems part of the title, rather than region +GAME( 1995, gtmr2, 0, gtmr2, gtmr2, gtmr2, ROT0, "Kaneko", "Mille Miglia 2: Great 1000 Miles Rally (95/05/24)", 0 ) +GAME( 1995, gtmr2a, gtmr2, gtmr2, gtmr2, gtmr2, ROT0, "Kaneko", "Mille Miglia 2: Great 1000 Miles Rally (95/04/04)", 0 ) +GAME( 1995, gtmr2u, gtmr2, gtmr2, gtmr2, gtmr2, ROT0, "Kaneko", "Great 1000 Miles Rally 2 USA (95/05/18)", 0 ) +// some functionality of the protection chip still needs investigating on these, but they seem to be playable +GAME( 1992, brapboys, 0, brapboys, brapboys, brapboys, ROT0, "Kaneko", "B.Rap Boys (World)", 0 ) +GAME( 1992, brapboysj,brapboys, brapboys, brapboys, brapboys, ROT0, "Kaneko", "B.Rap Boys Special (Japan)", 0 ) +GAME( 1992, shogwarr, 0, shogwarr, shogwarr, shogwarr, ROT0, "Kaneko", "Shogun Warriors (World)", 0 ) +GAME( 1992, shogwarru,shogwarr, shogwarr, shogwarr, shogwarr, ROT0, "Kaneko", "Shogun Warriors (US)", 0 ) +GAME( 1992, fjbuster, shogwarr, shogwarr, shogwarr, shogwarr, ROT0, "Kaneko", "Fujiyama Buster (Japan)", 0 ) + |