Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
4397 lines (3543 sloc) 214 KB
// license:BSD-3-Clause
// copyright-holders:Luca Elia, David Haywood
/***************************************************************************
-= 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 048 XJ009 (x3) (40pin) <- 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 BW-002 3 x VU-003 (encrypted high colour background)
Magical Crystals Z00FC-02
92 Bakuretsu Breaker ZOOFC-02
Blaze On Z02AT-002 2 x 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)
93 Wing Force (prototype) Z08AT-001 2 x VU-002 Sprites Chips, OKI sound
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.)
Pack'n Bang Bang BW-002 (prototype)
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]
- interrupt timing/behaviour
- replace sample bank copying with new ADDRESS MAP system for OKI and do banking like CPUs
Non-Bugs (happen on real PCB)
[packbang]
- Game crashes or gives you a corrupt stage if you attempt to continue on a bonus stage (due to buggy prototype code)
- Background fading appears inverted, fading to a black screen during levels, this is correct
- Some screens shown on the flyer (enemy select etc.) are never shown, the flyer probably shows a different version
of the game. The backgrounds used can be viewed in test mode.
***************************************************************************/
#include "emu.h"
#include "includes/kaneko16.h"
#include "speaker.h"
/***************************************************************************
Machine Initialisation
***************************************************************************/
MACHINE_RESET_MEMBER(kaneko16_state,gtmr)
{
m_VIEW2_2_pri = 1;
}
MACHINE_RESET_MEMBER(kaneko16_state,mgcrystl)
{
m_VIEW2_2_pri = 0;
}
/***************************************************************************
Misc Machine Emulation Routines
***************************************************************************/
void kaneko16_state::coin_lockout_w(u8 data)
{
machine().bookkeeping().coin_counter_w(0, BIT( data, 0));
machine().bookkeeping().coin_counter_w(1, BIT( data, 1));
machine().bookkeeping().coin_lockout_w(0, BIT(~data, 2));
machine().bookkeeping().coin_lockout_w(1, BIT(~data, 3));
}
void kaneko16_state::bloodwar_coin_lockout_w(u8 data)
{
machine().bookkeeping().coin_counter_w(0, BIT(data, 0));
machine().bookkeeping().coin_counter_w(1, BIT(data, 1));
machine().bookkeeping().coin_lockout_w(0, BIT(data, 7));
machine().bookkeeping().coin_lockout_w(1, BIT(data, 7));
}
/***************************************************************************
Sound
***************************************************************************/
/* Two identically mapped YM2149 chips */
template<unsigned Chip>
READ16_MEMBER(kaneko16_state::ym2149_r)
{
/* Each 2149 register is mapped to a different address */
m_ym2149[Chip]->address_w(offset);
return m_ym2149[Chip]->data_r();
}
template<unsigned Chip>
WRITE16_MEMBER(kaneko16_state::ym2149_w)
{
/* Each 2149 register is mapped to a different address */
m_ym2149[Chip]->address_w(offset);
/* The registers are mapped to odd addresses, except one! */
if (ACCESSING_BITS_0_7) m_ym2149[Chip]->data_w( data & 0xff);
else m_ym2149[Chip]->data_w((data >> 8) & 0xff);
}
template<unsigned Mask>
void kaneko16_state::oki_bank0_w(u8 data)
{
m_okibank[0]->set_entry(data & Mask);
// logerror("%s:Selecting OKI1 bank %02X\n",machine().describe_context(),data&0xff);
}
template<unsigned Mask>
void kaneko16_state::oki_bank1_w(u8 data)
{
m_okibank[1]->set_entry(data & Mask);
// logerror("%s:Selecting OKI2 bank %02X\n",machine().describe_context(),data&0xff);
}
/***************************************************************************
EEPROM
***************************************************************************/
void kaneko16_state::eeprom_w(u8 data)
{
m_eepromout_port->write(data, 0xff);
}
u8 kaneko16_state::eeprom_r()
{
return m_eeprom->do_read();
}
void kaneko16_state::eeprom_cs_w(u8 data)
{
m_eeprom->cs_write(data);
}
/***************************************************************************
Memory Maps - Main CPU
***************************************************************************/
/***************************************************************************
The Berlin Wall
***************************************************************************/
WRITE16_MEMBER(kaneko16_berlwall_state::berlwall_oki_w)
{
if (mem_mask == 0xff00) // reads / writes to the upper byte only appear to act as a mirror to the lower byte, 16-bit reads/writes only access the lower byte.
{
data >>= 8;
mem_mask >>= 8;
}
m_oki[0]->write(data);
}
u16 kaneko16_berlwall_state::berlwall_spriteram_r(offs_t offset)
{
offset = bitswap<16>(offset, 15, 14, 13, 12, 2, 11, 10, 9, 8, 7, 6, 5, 4, 3, 1, 0);
offset ^= 0x800;
return m_spriteram[offset];
}
void kaneko16_berlwall_state::berlwall_spriteram_w(offs_t offset, u16 data, u16 mem_mask)
{
offset = bitswap<16>(offset, 15, 14, 13, 12, 2, 11, 10, 9, 8, 7, 6, 5, 4, 3, 1, 0);
offset ^= 0x800;
COMBINE_DATA(&m_spriteram[offset]);
}
READ16_MEMBER(kaneko16_berlwall_state::berlwall_spriteregs_r)
{
if (offset & 0x4)
return 0;
offset = bitswap<8>(offset, 7, 6, 5, 2, 4, 3, 1, 0);
return m_kaneko_spr->regs_r(offset);
}
WRITE16_MEMBER(kaneko16_berlwall_state::berlwall_spriteregs_w)
{
if (offset & 0x4)
return;
offset = bitswap<8>(offset, 7, 6, 5, 2, 4, 3, 1, 0);
m_kaneko_spr->regs_w(offset, data, mem_mask);
}
void kaneko16_berlwall_state::berlwall_map(address_map &map)
{
map(0x000000, 0x03ffff).rom(); // ROM
map(0x200000, 0x20ffff).ram(); // Work RAM
map(0x30e000, 0x30ffff).rw(FUNC(kaneko16_berlwall_state::berlwall_spriteram_r), FUNC(kaneko16_berlwall_state::berlwall_spriteram_w)).share("spriteram"); // Sprites (scrambled RAM)
map(0x400000, 0x400fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0x480000, 0x480001).ram().share("bg15_scroll"); // High Color Background
map(0x500001, 0x500001).rw(FUNC(kaneko16_berlwall_state::bg15_bright_r), FUNC(kaneko16_berlwall_state::bg15_bright_w)); // ""
map(0x580001, 0x580001).rw(FUNC(kaneko16_berlwall_state::bg15_select_r), FUNC(kaneko16_berlwall_state::bg15_select_w)); // ""
map(0x600000, 0x60003f).rw(FUNC(kaneko16_berlwall_state::berlwall_spriteregs_r), FUNC(kaneko16_berlwall_state::berlwall_spriteregs_w)); // Sprite Regs (scrambled RAM)
map(0x680000, 0x680001).portr("P1");
map(0x680002, 0x680003).portr("P2");
map(0x680004, 0x680005).portr("SYSTEM");
// map(0x680006, 0x680007).portr("UNK");
map(0x700000, 0x700000).w(FUNC(kaneko16_berlwall_state::coin_lockout_w)); // Coin Lockout
map(0x780000, 0x780001).r(m_watchdog, FUNC(watchdog_timer_device::reset16_r));
map(0x800000, 0x80001f).rw(FUNC(kaneko16_berlwall_state::ym2149_r<0>), FUNC(kaneko16_berlwall_state::ym2149_w<0>)); // Sound
map(0x800200, 0x80021f).rw(FUNC(kaneko16_berlwall_state::ym2149_r<1>), FUNC(kaneko16_berlwall_state::ym2149_w<1>));
map(0x8003fe, 0x8003ff).noprw(); // for OKI when accessed as .l
map(0x800400, 0x800401).r(m_oki[0], FUNC(okim6295_device::read)).w(FUNC(kaneko16_berlwall_state::berlwall_oki_w));
map(0xc00000, 0xc03fff).m(m_view2[0], FUNC(kaneko_view2_tilemap_device::vram_map));
map(0xd00000, 0xd0001f).rw(m_view2[0], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
}
/***************************************************************************
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??? */
void kaneko16_state::bakubrkr_map(address_map &map)
{
map(0x000000, 0x07ffff).rom(); // ROM
map(0x100000, 0x10ffff).ram(); // Work RAM
map(0x400000, 0x40001f).r(FUNC(kaneko16_state::ym2149_r<0>)); // Sound
map(0x400000, 0x40001d).w(FUNC(kaneko16_state::ym2149_w<0>));
map(0x40001f, 0x40001f).w(FUNC(kaneko16_state::oki_bank0_w<7>)); // OKI bank Switch
map(0x400200, 0x40021f).rw(FUNC(kaneko16_state::ym2149_r<1>), FUNC(kaneko16_state::ym2149_w<1>)); // Sound
map(0x400401, 0x400401).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write)); //
map(0x500000, 0x503fff).m(m_view2[0], FUNC(kaneko_view2_tilemap_device::vram_map));
map(0x580000, 0x583fff).m(m_view2[1], FUNC(kaneko_view2_tilemap_device::vram_map));
map(0x600000, 0x601fff).ram().share("spriteram"); // Sprites
map(0x700000, 0x700fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0x800000, 0x80001f).rw(m_view2[0], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
map(0x900000, 0x90001f).rw(m_kaneko_spr, FUNC(kaneko16_sprite_device::regs_r), FUNC(kaneko16_sprite_device::regs_w));
map(0xa80000, 0xa80001).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
map(0xb00000, 0xb0001f).rw(m_view2[1], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
map(0xd00000, 0xd00000).w(FUNC(kaneko16_state::bloodwar_coin_lockout_w)); // Coin Lockout
map(0xd00001, 0xd00001).w(FUNC(kaneko16_state::eeprom_w)); // EEPROM
map(0xe00000, 0xe00001).portr("P1");
map(0xe00002, 0xe00003).portr("P2");
map(0xe00004, 0xe00005).portr("SYSTEM");
map(0xe00006, 0xe00007).portr("UNK");
}
/***************************************************************************
Blaze On
***************************************************************************/
void kaneko16_state::blazeon_map(address_map &map)
{
map(0x000000, 0x0fffff).rom(); // ROM
map(0x300000, 0x30ffff).ram(); // Work RAM
map(0x500000, 0x500fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0x600000, 0x603fff).m(m_view2[0], FUNC(kaneko_view2_tilemap_device::vram_map));
map(0x700000, 0x700fff).ram().share("spriteram"); // Sprites
map(0x800000, 0x80001f).rw(m_view2[0], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
map(0x900000, 0x90001f).rw(m_kaneko_spr, FUNC(kaneko16_sprite_device::regs_r), FUNC(kaneko16_sprite_device::regs_w));
map(0x980000, 0x98001f).ram(); // Sprites Regs #2
map(0xc00000, 0xc00001).portr("DSW2_P1");
map(0xc00002, 0xc00003).portr("DSW1_P2");
map(0xc00004, 0xc00005).portr("UNK");
map(0xc00006, 0xc00007).portr("SYSTEM");
map(0xd00000, 0xd00000).w(FUNC(kaneko16_state::coin_lockout_w)); // Coin Lockout
map(0xe00000, 0xe00001).nopr(); // Read = IRQ Ack ?
map(0xe00000, 0xe00000).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0xe40000, 0xe40001).nopr(); // IRQ Ack ?
// map(0xe80000, 0xe80001) AM_READNOP // IRQ Ack ?
map(0xec0000, 0xec0001).nopr(); // Lev 4 IRQ Ack ?
}
/***************************************************************************
Blood Warrior
***************************************************************************/
void kaneko16_gtmr_state::bloodwar_map(address_map &map)
{
map(0x000000, 0x0fffff).rom(); // ROM
map(0x100000, 0x10ffff).ram(); // Work RAM
map(0x200000, 0x20ffff).ram().share("mcuram");
map(0x2a0000, 0x2a0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com0_w)); // To MCU ?
map(0x2b0000, 0x2b0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com1_w));
map(0x2c0000, 0x2c0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com2_w));
map(0x2d0000, 0x2d0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com3_w));
map(0x300000, 0x30ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0x400000, 0x401fff).ram().share("spriteram"); // Sprites
map(0x500000, 0x503fff).m(m_view2[0], FUNC(kaneko_view2_tilemap_device::vram_map));
map(0x580000, 0x583fff).m(m_view2[1], FUNC(kaneko_view2_tilemap_device::vram_map));
map(0x600000, 0x60001f).rw(m_view2[0], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
map(0x680000, 0x68001f).rw(m_view2[1], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
map(0x700000, 0x70001f).rw(m_kaneko_spr, FUNC(kaneko16_sprite_device::regs_r), FUNC(kaneko16_sprite_device::regs_w));
map(0x800001, 0x800001).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x880001, 0x880001).rw(m_oki[1], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x900000, 0x900039).rw(m_kaneko_hit, FUNC(kaneko_hit_device::kaneko_hit_r), FUNC(kaneko_hit_device::kaneko_hit_w));
map(0xa00000, 0xa00001).rw(m_watchdog, FUNC(watchdog_timer_device::reset16_r), FUNC(watchdog_timer_device::reset16_w));
map(0xb00000, 0xb00001).portr("P1");
map(0xb00002, 0xb00003).portr("P2");
map(0xb00004, 0xb00005).portr("SYSTEM");
map(0xb00006, 0xb00007).portr("EXTRA");
map(0xb80000, 0xb80000).w(FUNC(kaneko16_gtmr_state::bloodwar_coin_lockout_w)); // Coin Lockout
map(0xc00000, 0xc00001).w(FUNC(kaneko16_gtmr_state::display_enable_w));
map(0xd00000, 0xd00001).r(m_toybox, FUNC(kaneko_toybox_device::mcu_status_r));
map(0xe00001, 0xe00001).w(FUNC(kaneko16_gtmr_state::oki_bank0_w<0xf>));
map(0xe80001, 0xe80001).w(FUNC(kaneko16_gtmr_state::oki_bank1_w<0x3>));
}
/***************************************************************************
Bonk's Adventure
***************************************************************************/
void kaneko16_gtmr_state::bonkadv_map(address_map &map)
{
map(0x000000, 0x0fffff).rom(); // ROM
map(0x100000, 0x10ffff).ram(); // Work RAM
map(0x200000, 0x20ffff).ram().share("mcuram"); // Shared With MCU
map(0x2a0000, 0x2a0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com0_w)); // To MCU ?
map(0x2b0000, 0x2b0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com1_w));
map(0x2c0000, 0x2c0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com2_w));
map(0x2d0000, 0x2d0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com3_w));
map(0x300000, 0x30ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0x400000, 0x401fff).ram().share("spriteram"); // Sprites
map(0x500000, 0x503fff).m(m_view2[0], FUNC(kaneko_view2_tilemap_device::vram_map));
map(0x580000, 0x583fff).m(m_view2[1], FUNC(kaneko_view2_tilemap_device::vram_map));
map(0x600000, 0x60001f).rw(m_view2[0], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
map(0x680000, 0x68001f).rw(m_view2[1], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
map(0x700000, 0x70001f).rw(m_kaneko_spr, FUNC(kaneko16_sprite_device::regs_r), FUNC(kaneko16_sprite_device::regs_w));
map(0x800001, 0x800001).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x880001, 0x880001).rw(m_oki[1], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x900000, 0x900015).rw(m_kaneko_hit, FUNC(kaneko_hit_device::kaneko_hit_r), FUNC(kaneko_hit_device::kaneko_hit_w));
map(0xa00000, 0xa00001).rw(m_watchdog, FUNC(watchdog_timer_device::reset16_r), FUNC(watchdog_timer_device::reset16_w)); // Watchdog
map(0xb00000, 0xb00001).portr("P1");
map(0xb00002, 0xb00003).portr("P2");
map(0xb00004, 0xb00005).portr("SYSTEM");
map(0xb00006, 0xb00007).portr("UNK");
map(0xb80000, 0xb80000).w(FUNC(kaneko16_gtmr_state::bloodwar_coin_lockout_w)); // Coin Lockout
map(0xc00000, 0xc00001).w(FUNC(kaneko16_gtmr_state::display_enable_w));
map(0xd00000, 0xd00001).r(m_toybox, FUNC(kaneko_toybox_device::mcu_status_r));
map(0xe00001, 0xe00001).w(FUNC(kaneko16_gtmr_state::oki_bank0_w<0xf>));
map(0xe80001, 0xe80001).w(FUNC(kaneko16_gtmr_state::oki_bank1_w<0xf>));
}
/***************************************************************************
Great 1000 Miles Rally
***************************************************************************/
u16 kaneko16_gtmr_state::gtmr_wheel_r()
{
// check 'Controls' dip switch
switch (m_dsw_port->read() & 0x1000)
{
case 0x0000: // 'Both Sides' = 270deg Wheel
return (m_wheel_port[0]->read());
case 0x1000: // '1P Side' = 360' Wheel
return (m_wheel_port[1]->read());
default:
return (0);
}
}
void kaneko16_gtmr_state::gtmr_map(address_map &map)
{
map(0x000000, 0x0ffffd).rom(); // ROM
map(0x0ffffe, 0x0fffff).r(FUNC(kaneko16_gtmr_state::gtmr_wheel_r)); // Wheel Value
map(0x100000, 0x10ffff).ram(); // Work RAM
map(0x200000, 0x20ffff).ram().share(m_mcuram); // Shared With MCU
map(0x2a0000, 0x2a0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com0_w)); // To MCU ?
map(0x2b0000, 0x2b0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com1_w));
map(0x2c0000, 0x2c0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com2_w));
map(0x2d0000, 0x2d0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com3_w));
map(0x300000, 0x30ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0x310000, 0x327fff).ram(); //
map(0x400000, 0x401fff).ram().share(m_spriteram); // Sprites
map(0x500000, 0x503fff).m(m_view2[0], FUNC(kaneko_view2_tilemap_device::vram_map));
map(0x580000, 0x583fff).m(m_view2[1], FUNC(kaneko_view2_tilemap_device::vram_map));
map(0x600000, 0x60000f).rw(m_view2[0], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
map(0x680000, 0x68001f).rw(m_view2[1], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
map(0x700000, 0x70001f).rw(m_kaneko_spr, FUNC(kaneko16_sprite_device::regs_r), FUNC(kaneko16_sprite_device::regs_w));
map(0x800001, 0x800001).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // Samples
map(0x880001, 0x880001).rw(m_oki[1], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x900000, 0x900039).rw(m_kaneko_hit, FUNC(kaneko_hit_device::kaneko_hit_r), FUNC(kaneko_hit_device::kaneko_hit_w)); // only used for random number
map(0xa00000, 0xa00001).rw(m_watchdog, FUNC(watchdog_timer_device::reset16_r), FUNC(watchdog_timer_device::reset16_w));
map(0xb00000, 0xb00001).portr("P1");
map(0xb00002, 0xb00003).portr("P2");
map(0xb00004, 0xb00005).portr("SYSTEM");
map(0xb00006, 0xb00007).portr("UNK");
map(0xb80000, 0xb80000).w(FUNC(kaneko16_gtmr_state::coin_lockout_w)); // Coin Lockout
map(0xc00000, 0xc00001).w(FUNC(kaneko16_gtmr_state::display_enable_w)); // might do more than that
map(0xd00000, 0xd00001).r(m_toybox, FUNC(kaneko_toybox_device::mcu_status_r));
map(0xe00001, 0xe00001).w(FUNC(kaneko16_gtmr_state::oki_bank0_w<0xf>)); // Samples Bankswitching
map(0xe80001, 0xe80001).w(FUNC(kaneko16_gtmr_state::oki_bank1_w<0x1>));
}
/***************************************************************************
Great 1000 Miles Rally 2
***************************************************************************/
u16 kaneko16_gtmr_state::gtmr2_wheel_r()
{
switch (m_dsw_port->read() & 0x1800)
{
case 0x0000: // 270' A. Wheel
return (m_wheel_port[0]->read());
case 0x1000: // 270' D. Wheel
return (m_wheel_port[1]->read() << 8);
case 0x0800: // 360' Wheel
return (m_wheel_port[2]->read() << 8);
default:
logerror("gtmr2_wheel_r : read at %06x with joystick\n", m_maincpu->pc());
return (~0);
}
}
u16 kaneko16_gtmr_state::gtmr2_IN1_r()
{
return (m_p2_port->read() & (m_fake_port->read() | ~0x7100));
}
void kaneko16_gtmr_state::gtmr2_map(address_map &map)
{
map(0x000000, 0x0ffffd).rom(); // ROM
map(0x0ffffe, 0x0fffff).r(FUNC(kaneko16_gtmr_state::gtmr2_wheel_r)); // Wheel Value
map(0x100000, 0x10ffff).ram(); // Work RAM
map(0x200000, 0x20ffff).ram().share(m_mcuram); // Shared With MCU
map(0x2a0000, 0x2a0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com0_w)); // To MCU ?
map(0x2b0000, 0x2b0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com1_w));
map(0x2c0000, 0x2c0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com2_w));
map(0x2d0000, 0x2d0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com3_w));
map(0x300000, 0x30ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0x310000, 0x327fff).ram(); //
map(0x400000, 0x401fff).ram().share(m_spriteram); // Sprites
map(0x500000, 0x503fff).m(m_view2[0], FUNC(kaneko_view2_tilemap_device::vram_map));
map(0x580000, 0x583fff).m(m_view2[1], FUNC(kaneko_view2_tilemap_device::vram_map));
map(0x600000, 0x60000f).rw(m_view2[0], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
map(0x680000, 0x68001f).rw(m_view2[1], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
map(0x700000, 0x70001f).rw(m_kaneko_spr, FUNC(kaneko16_sprite_device::regs_r), FUNC(kaneko16_sprite_device::regs_w));
map(0x800001, 0x800001).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // Samples
map(0x880001, 0x880001).rw(m_oki[1], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x900000, 0x900039).rw(m_kaneko_hit, FUNC(kaneko_hit_device::kaneko_hit_r), FUNC(kaneko_hit_device::kaneko_hit_w)); // only used for random number
map(0xa00000, 0xa00001).rw(m_watchdog, FUNC(watchdog_timer_device::reset16_r), FUNC(watchdog_timer_device::reset16_w)); // Watchdog
map(0xb00000, 0xb00001).portr("P1");
// map(0xb00002, 0xb00003) AM_READ_PORT("P2")
map(0xb00002, 0xb00003).r(FUNC(kaneko16_gtmr_state::gtmr2_IN1_r));
map(0xb00004, 0xb00005).portr("SYSTEM");
map(0xb00006, 0xb00007).portr("EXTRA");
map(0xb80000, 0xb80000).w(FUNC(kaneko16_gtmr_state::coin_lockout_w)); // Coin Lockout
map(0xc00000, 0xc00001).w(FUNC(kaneko16_gtmr_state::display_enable_w)); // might do more than that
map(0xd00000, 0xd00001).r(m_toybox, FUNC(kaneko_toybox_device::mcu_status_r));
map(0xe00001, 0xe00001).w(FUNC(kaneko16_gtmr_state::oki_bank0_w<0xf>)); // Samples Bankswitching
map(0xe80001, 0xe80001).w(FUNC(kaneko16_gtmr_state::oki_bank1_w<0x1>));
}
/***************************************************************************
Magical Crystal
***************************************************************************/
void kaneko16_state::mgcrystl_map(address_map &map)
{
map(0x000000, 0x07ffff).rom(); // ROM
map(0x300000, 0x30ffff).ram(); // Work RAM
map(0x400000, 0x40001f).rw(FUNC(kaneko16_state::ym2149_r<0>), FUNC(kaneko16_state::ym2149_w<0>)); // Sound
map(0x400200, 0x40021f).rw(FUNC(kaneko16_state::ym2149_r<1>), FUNC(kaneko16_state::ym2149_w<1>));
map(0x400401, 0x400401).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x500000, 0x500fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0x600000, 0x603fff).m(m_view2[0], FUNC(kaneko_view2_tilemap_device::vram_map));
map(0x680000, 0x683fff).m(m_view2[1], FUNC(kaneko_view2_tilemap_device::vram_map));
map(0x700000, 0x701fff).ram().share("spriteram"); // Sprites
map(0x800000, 0x80001f).rw(m_view2[0], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
map(0x900000, 0x90001f).rw(m_kaneko_spr, FUNC(kaneko16_sprite_device::regs_r), FUNC(kaneko16_sprite_device::regs_w));
map(0xb00000, 0xb0001f).rw(m_view2[1], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
map(0xa00000, 0xa00001).r(m_watchdog, FUNC(watchdog_timer_device::reset16_r)); // Watchdog
map(0xc00000, 0xc00001).portr("DSW_P1");
map(0xc00002, 0xc00003).portr("P2");
map(0xc00004, 0xc00005).portr("SYSTEM");
map(0xd00000, 0xd00000).w(FUNC(kaneko16_state::bloodwar_coin_lockout_w)); // Coin Lockout
map(0xd00001, 0xd00001).w(FUNC(kaneko16_state::eeprom_w)); // EEPROM
}
/***************************************************************************
Shogun Warriors
***************************************************************************/
void kaneko16_shogwarr_state::shogwarr_oki_bank_w(u8 data)
{
m_okibank[0]->set_entry((data >> 4) & 0xf);
m_okibank[1]->set_entry((data & 0xf));
}
void kaneko16_shogwarr_state::shogwarr_map(address_map &map)
{
map(0x000000, 0x03ffff).rom(); // ROM
map(0x100000, 0x10ffff).ram().share(m_mainram); // Work RAM
map(0x200000, 0x20ffff).ram().share(m_mcuram);
map(0x280000, 0x280001).w(m_calc3_prot, FUNC(kaneko_calc3_device::mcu_com0_w));
map(0x290000, 0x290001).w(m_calc3_prot, FUNC(kaneko_calc3_device::mcu_com1_w));
map(0x2b0000, 0x2b0001).w(m_calc3_prot, FUNC(kaneko_calc3_device::mcu_com2_w));
//map(0x2c0000, 0x2c0001) // run calc 3? or irq ack?
map(0x2d0000, 0x2d0001).w(m_calc3_prot, FUNC(kaneko_calc3_device::mcu_com3_w));
map(0x380000, 0x380fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0x400001, 0x400001).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // Samples
map(0x480001, 0x480001).rw(m_oki[1], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x580000, 0x581fff).ram().share("spriteram"); // Sprites
map(0x600000, 0x603fff).m(m_view2[0], FUNC(kaneko_view2_tilemap_device::vram_map));
map(0x800000, 0x80001f).rw(m_view2[0], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
map(0x900000, 0x90001f).rw(m_kaneko_spr, FUNC(kaneko16_sprite_device::regs_r), FUNC(kaneko16_sprite_device::regs_w));
map(0xa00000, 0xa0007f).rw(m_kaneko_hit, FUNC(kaneko_hit_device::kaneko_hit_r), FUNC(kaneko_hit_device::kaneko_hit_w));
map(0xa80000, 0xa80001).rw(m_watchdog, FUNC(watchdog_timer_device::reset16_r), FUNC(watchdog_timer_device::reset16_w));
map(0xb80000, 0xb80001).portr("P1");
map(0xb80002, 0xb80003).portr("P2");
map(0xb80004, 0xb80005).portr("SYSTEM");
map(0xb80006, 0xb80007).portr("UNK");
map(0xd00000, 0xd00001).noprw(); // ? (bit 0)
map(0xe00001, 0xe00001).w(FUNC(kaneko16_shogwarr_state::shogwarr_oki_bank_w)); // Samples Bankswitching
}
/***************************************************************************
Memory Maps - Sound CPU
***************************************************************************/
/***************************************************************************
Blaze On
***************************************************************************/
void kaneko16_state::blazeon_soundmem(address_map &map)
{
map(0x0000, 0x7fff).rom(); // ROM
map(0x8000, 0xbfff).rom(); // ROM (supposed to be banked?)
map(0xc000, 0xdfff).ram(); // RAM
//map(0xe000, 0xe001).noprw(); // Unknown read / writes in boot
}
void kaneko16_state::blazeon_soundport(address_map &map)
{
map.global_mask(0xff);
map(0x02, 0x03).rw(m_ymsnd, FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0x06, 0x06).r(m_soundlatch, FUNC(generic_latch_8_device::read));
}
/***************************************************************************
Wing Force
***************************************************************************/
void kaneko16_state::wingforc_soundport(address_map &map)
{
map.global_mask(0xff);
// map(0x00, 0x00) // 02 written at boot
map(0x02, 0x03).rw(m_ymsnd, FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0x06, 0x06).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0x0a, 0x0a).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x0c, 0x0c).w(FUNC(kaneko16_state::oki_bank0_w<0x3>));
}
/***************************************************************************
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_serial_93cxx_device, clk_write)
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write)
INPUT_PORTS_END
/***************************************************************************
The Berlin Wall
***************************************************************************/
static INPUT_PORTS_START( berlwall )
PORT_START("P1") /* 680000.w */
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(1)
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(1)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(1)
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY 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_4WAY PORT_PLAYER(2)
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(2)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(2)
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY 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" )
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 (bootleg ?)
***************************************************************************/
// Same as berlwall, but for a different lives setting
static INPUT_PORTS_START( berlwallt )
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
/***************************************************************************
The Berlin Wall (Korea)
***************************************************************************/
// Same as berlwallt, but no country setting
static INPUT_PORTS_START( berlwallk )
PORT_INCLUDE(berlwallt)
PORT_MODIFY("DSW2")
PORT_DIPNAME( 0x30, 0x30, "Pause Mode" ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x30, "Off (1)" )
PORT_DIPSETTING( 0x20, "Off (2)" )
PORT_DIPSETTING( 0x10, "Off (3)" )
PORT_DIPSETTING( 0x00, "Freeze Screen" )
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
/***************************************************************************
Wing Force
***************************************************************************/
static INPUT_PORTS_START( wingforc )
PORT_START("DSW2_P1") /* c00000.w */
// The game reads and stores these the same as Blaze On.
// However, none of them actually get used. Lives does work if you patch out the
// code that actively zeroes out the value it reads from here.
PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0001, "SW1:1" )
PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0002, "SW1:2" )
PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0004, "SW1:3" )
PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0008, "SW1:4" )
PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0010, "SW1:5" )
PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0020, "SW1:6" )
PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0040, "SW1:7" )
PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0080, "SW1: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 */
// In a similar story to DSW2, these are read and then forced to zero.
// These are credit selections with the same values as Blaze On.
// These work if you remove the code to force to zero, but they don't
// give any feedback unless the coin increases the credit counter.
PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0001, "SW2:1" )
PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0002, "SW2:2" )
PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0004, "SW2:3" )
PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0008, "SW2:4" )
PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0010, "SW2:5" )
PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0020, "SW2:6" )
PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0040, "SW2:7" )
PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0080, "SW2:8" )
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 ) // unused
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_TILT ) // unused
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, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, 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_CONDITION("DSW1",0x0800,NOTEQUALS,0x00)
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("DSW1",0x0800,NOTEQUALS,0x00)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("DSW1",0x0800,NOTEQUALS,0x00)
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("DSW1",0x0800,NOTEQUALS,0x00)
PORT_BIT( 0x0f00, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW1",0x0800,EQUALS,0x00)
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") /* b0002.w */
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("DSW1",0x0800,NOTEQUALS,0x00)
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("DSW1",0x0800,NOTEQUALS,0x00)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("DSW1",0x0800,NOTEQUALS,0x00)
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("DSW1",0x0800,NOTEQUALS,0x00)
PORT_BIT( 0x0f00, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW1",0x0800,EQUALS,0x00)
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") /* 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,NOTEQUALS,0x00)
PORT_DIPSETTING( 0x0000, "Both Sides" ) PORT_CONDITION("DSW1",0x0800,NOTEQUALS,0x00)
PORT_DIPSETTING( 0x1000, "360 degree wheel" ) PORT_CONDITION("DSW1",0x0800,EQUALS,0x00)
PORT_DIPSETTING( 0x0000, "270 degree wheel" ) PORT_CONDITION("DSW1",0x0800,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_PLAYER(1) PORT_CONDITION("DSW1",0x1800,EQUALS,0x0000)
PORT_BIT ( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW1",0x1800,NOTEQUALS,0x0000)
PORT_START("WHEEL1") /* Wheel (360deg) */
PORT_BIT ( 0x00ff, 0x0000, IPT_DIAL ) PORT_SENSITIVITY(70) PORT_KEYDELTA(25) PORT_PLAYER(1) PORT_CONDITION("DSW1",0x1800,EQUALS,0x1000)
PORT_BIT ( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW1",0x1800,NOTEQUALS,0x1000)
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_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") /* 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_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") /* 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_serial_93cxx_device, clk_write)
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write)
INPUT_PORTS_END
/***************************************************************************
Pack'n Bang Bang
***************************************************************************/
static INPUT_PORTS_START( packbang )
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")
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")
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( 0x04, 0x04, "Timer Speed" ) PORT_DIPLOCATION("SW2:3")
PORT_DIPSETTING( 0x00, "Slow" )
PORT_DIPSETTING( 0x04, "Standard" )
PORT_DIPNAME( 0x18, 0x18, DEF_STR( Language ) ) PORT_DIPLOCATION("SW2:4,5")
PORT_DIPSETTING( 0x00, "Invalid" ) // Japanese text, Korean Kaneko logo 'Unusued' according to test mode
PORT_DIPSETTING( 0x08, DEF_STR( Korea ) )
PORT_DIPSETTING( 0x10, DEF_STR( Japan ) )
PORT_DIPSETTING( 0x18, DEF_STR( World ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW2:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
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
/***************************************************************************
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_serial_93cxx_device, clk_write)
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write)
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_serial_93cxx_device, clk_write)
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write)
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( gfx_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( gfx_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( gfx_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
***************************************************************************/
TIMER_DEVICE_CALLBACK_MEMBER(kaneko16_state::interrupt)
{
int scanline = param;
// main vblank interrupt
if(scanline == 224)
m_maincpu->set_input_line(5, HOLD_LINE);
// each of these 2 int are responsible of translating a part of sprite buffer
// from work ram to sprite ram. How these are scheduled is unknown.
if(scanline == 64)
m_maincpu->set_input_line(4, HOLD_LINE);
if(scanline == 144)
m_maincpu->set_input_line(3, HOLD_LINE);
}
/***************************************************************************
The Berlin Wall
***************************************************************************/
/*
Berlwall interrupts:
1-3] e8c:
4] e54:
5] de4:
6-7] rte
*/
void kaneko16_berlwall_state::berlwall(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, 12000000); /* MC68000P12 */
m_maincpu->set_addrmap(AS_PROGRAM, &kaneko16_berlwall_state::berlwall_map);
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_berlwall_state::interrupt), "screen", 0, 1);
WATCHDOG_TIMER(config, m_watchdog);
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
// m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK); // mangled sprites otherwise
m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
m_screen->set_size(256, 256);
m_screen->set_visarea(0, 256-1, 16, 240-1);
m_screen->set_screen_update(FUNC(kaneko16_berlwall_state::screen_update));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_1x4bit_1x4bit);
PALETTE(config, m_palette).set_format(palette_device::xGRB_555, 2048);
PALETTE(config, m_bgpalette, palette_device::GRB_555); // 32768 static colors for the bg
KANEKO_TMAP(config, m_view2[0]);
m_view2[0]->set_gfx_region(1);
m_view2[0]->set_offset(0x5b, -0x8, 256, 240+16);
m_view2[0]->set_gfxdecode_tag("gfxdecode");
KANEKO_VU002_SPRITE(config, m_kaneko_spr);
m_kaneko_spr->set_offsets(0, -1*64);
m_kaneko_spr->set_gfxdecode_tag("gfxdecode");
/* sound hardware */
SPEAKER(config, "mono").front_center();
YM2149(config, m_ym2149[0], 1000000);
m_ym2149[0]->add_route(ALL_OUTPUTS, "mono", 1.0);
m_ym2149[0]->port_a_read_callback().set_ioport("DSW1");
m_ym2149[0]->port_b_read_callback().set_ioport("DSW2");
YM2149(config, m_ym2149[1], 1000000);
m_ym2149[1]->add_route(ALL_OUTPUTS, "mono", 1.0);
OKIM6295(config, m_oki[0], 12000000/6, okim6295_device::PIN7_LOW);
m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0);
}
/***************************************************************************
Bakuretsu Breaker
***************************************************************************/
void kaneko16_state::bakubrkr_oki1_map(address_map &map)
{
map(0x00000, 0x1ffff).rom();
map(0x20000, 0x3ffff).bankr("okibank1");
}
void kaneko16_state::bakubrkr(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(12'000'000)); /* verified on pcb */
m_maincpu->set_addrmap(AS_PROGRAM, &kaneko16_state::bakubrkr_map);
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_state::interrupt), "screen", 0, 1);
MCFG_MACHINE_RESET_OVERRIDE(kaneko16_state,gtmr)
EEPROM_93C46_16BIT(config, m_eeprom);
WATCHDOG_TIMER(config, m_watchdog);
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK); // mangled sprites otherwise
m_screen->set_refresh_hz(59);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
m_screen->set_size(256, 256);
m_screen->set_visarea(0, 256-1, 16, 240-1);
m_screen->set_screen_update(FUNC(kaneko16_state::screen_update));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_1x4bit_2x4bit);
PALETTE(config, m_palette).set_format(palette_device::xGRB_555, 2048);
KANEKO_TMAP(config, m_view2[0]);
m_view2[0]->set_gfx_region(1);
m_view2[0]->set_offset(0x5b, -0x8, 256, 240);
m_view2[0]->set_gfxdecode_tag("gfxdecode");
KANEKO_TMAP(config, m_view2[1]);
m_view2[1]->set_gfx_region(2);
m_view2[1]->set_offset(0x5b, -0x8, 256, 240);
m_view2[1]->set_gfxdecode_tag("gfxdecode");
KANEKO_VU002_SPRITE(config, m_kaneko_spr);
m_kaneko_spr->set_priorities(8,8,8,8); // above all
m_kaneko_spr->set_gfxdecode_tag("gfxdecode");
/* sound hardware */
SPEAKER(config, "mono").front_center();
YM2149(config, m_ym2149[0], XTAL(12'000'000)/6); /* verified on pcb */
m_ym2149[0]->add_route(ALL_OUTPUTS, "mono", 1.0);
YM2149(config, m_ym2149[1], XTAL(12'000'000)/6); /* verified on pcb */
m_ym2149[1]->add_route(ALL_OUTPUTS, "mono", 1.0);
m_ym2149[1]->port_a_read_callback().set(FUNC(kaneko16_state::eeprom_r)); /* inputs A: 0,EEPROM bit read */
m_ym2149[1]->port_b_write_callback().set(FUNC(kaneko16_state::eeprom_cs_w)); /* outputs B: 0,EEPROM reset */
OKIM6295(config, m_oki[0], XTAL(12'000'000)/6, okim6295_device::PIN7_HIGH); /* verified on pcb */
m_oki[0]->set_addrmap(0, &kaneko16_state::bakubrkr_oki1_map);
m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0);
}
/***************************************************************************
Blaze On
***************************************************************************/
/*
Blaze On:
1] busy loop
2] does nothing
3] rte
4] drives the game
5] == 2
6-7] busy loop
*/
void kaneko16_state::blazeon(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, 12000000); /* TMP68HC000-12 */
m_maincpu->set_addrmap(AS_PROGRAM, &kaneko16_state::blazeon_map);
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_state::interrupt), "screen", 0, 1);
Z80(config, m_audiocpu, 4000000); /* D780C-2 (6 MHz) */
m_audiocpu->set_addrmap(AS_PROGRAM, &kaneko16_state::blazeon_soundmem);
m_audiocpu->set_addrmap(AS_IO, &kaneko16_state::blazeon_soundport);
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
m_screen->set_size(320, 240);
m_screen->set_visarea(0, 320-1, 0, 240-1 -8);
m_screen->set_screen_update(FUNC(kaneko16_state::screen_update));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_1x4bit_1x4bit);
PALETTE(config, m_palette).set_format(palette_device::xGRB_555, 2048);
KANEKO_TMAP(config, m_view2[0], 0);
m_view2[0]->set_gfx_region(1);
m_view2[0]->set_offset(0x33, 0x8, 320, 240);
m_view2[0]->set_gfxdecode_tag("gfxdecode");
KANEKO_VU002_SPRITE(config, m_kaneko_spr);
m_kaneko_spr->set_priorities(1 /* "above tile[0], below the others" */ ,2 /* "above tile[0-1], below the others" */ ,8 /* above all */,8 /* above all */);
m_kaneko_spr->set_offsets(0x10000 - 0x680, 0x000);
m_kaneko_spr->set_gfxdecode_tag("gfxdecode");
// there is actually a 2nd sprite chip! looks like our device emulation handles both at once
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
YM2151(config, m_ymsnd, 4000000);
m_ymsnd->add_route(0, "lspeaker", 1.0);
m_ymsnd->add_route(1, "rspeaker", 1.0);
}
/***************************************************************************
Wing Force
***************************************************************************/
void kaneko16_state::wingforc(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(16'000'000)); /* TMP68HC000N-16 */
m_maincpu->set_addrmap(AS_PROGRAM, &kaneko16_state::blazeon_map);
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_state::interrupt), "screen", 0, 1);
Z80(config, m_audiocpu, XTAL(16'000'000)/4); /* D780C-2 (6 MHz) */
m_audiocpu->set_addrmap(AS_PROGRAM, &kaneko16_state::blazeon_soundmem);
m_audiocpu->set_addrmap(AS_IO, &kaneko16_state::wingforc_soundport);
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
m_screen->set_refresh_hz(59.1854);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
m_screen->set_size(320, 240);
m_screen->set_visarea(0, 320-1, 0, 240-1 -16);
m_screen->set_screen_update(FUNC(kaneko16_state::screen_update));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_1x4bit_1x4bit);
PALETTE(config, m_palette).set_format(palette_device::xGRB_555, 2048);
KANEKO_TMAP(config, m_view2[0]);
m_view2[0]->set_gfx_region(1);
m_view2[0]->set_offset(0x33, 0x8+1, 320, 240);
m_view2[0]->set_gfxdecode_tag("gfxdecode");
KANEKO_VU002_SPRITE(config, m_kaneko_spr);
m_kaneko_spr->set_priorities(1 /* "above tile[0], below the others" */ ,2 /* "above tile[0-1], below the others" */ ,8 /* above all */,8 /* above all */);
m_kaneko_spr->set_offsets(0x10000 - 0x680, 0x000);
m_kaneko_spr->set_gfxdecode_tag("gfxdecode");
// there is actually a 2nd sprite chip! looks like our device emulation handles both at once
/* sound hardware */
SPEAKER(config, "mono").front_center();
GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
YM2151(config, m_ymsnd, XTAL(16'000'000)/4);
m_ymsnd->add_route(ALL_OUTPUTS, "mono", 0.4);
OKIM6295(config, m_oki[0], XTAL(16'000'000)/16, okim6295_device::PIN7_HIGH);
m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0);
m_oki[0]->set_addrmap(0, &kaneko16_state::bakubrkr_oki1_map);
}
/***************************************************************************
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
*/
void kaneko16_state::gtmr_oki1_map(address_map &map)
{
map(0x00000, 0x2ffff).rom();
map(0x30000, 0x3ffff).bankr("okibank1");
}
void kaneko16_state::gtmr_oki2_map(address_map &map)
{
map(0x00000, 0x3ffff).bankr("okibank2");
}
void kaneko16_gtmr_state::gtmr(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(16'000'000)); /* verified on pcb */
m_maincpu->set_addrmap(AS_PROGRAM, &kaneko16_gtmr_state::gtmr_map);
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_gtmr_state::interrupt), "screen", 0, 1);
MCFG_MACHINE_RESET_OVERRIDE(kaneko16_gtmr_state,gtmr)
EEPROM_93C46_16BIT(config, m_eeprom);
WATCHDOG_TIMER(config, m_watchdog);
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
m_screen->set_size(320, 240);
m_screen->set_visarea(0, 320-1, 0, 240-1);
m_screen->set_screen_update(FUNC(kaneko16_gtmr_state::screen_update));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_1x8bit_2x4bit);
PALETTE(config, m_palette).set_format(palette_device::xGRB_555, 32768);
KANEKO_TMAP(config, m_view2[0]);
m_view2[0]->set_gfx_region(1);
m_view2[0]->set_offset(0x33, 0x00, 320, 240);
m_view2[0]->set_gfxdecode_tag("gfxdecode");
KANEKO_TMAP(config, m_view2[1]);
m_view2[1]->set_gfx_region(2);
m_view2[1]->set_offset(0x33, 0x00, 320, 240);
m_view2[1]->set_gfxdecode_tag("gfxdecode");
KANEKO_KC002_SPRITE(config, m_kaneko_spr);
m_kaneko_spr->set_gfxdecode_tag("gfxdecode");
KANEKO_TOYBOX(config, m_toybox, m_eeprom, m_dsw_port, m_mcuram, "mcudata");
/* part of the toybox? */
KANEKO_HIT(config, m_kaneko_hit);
m_kaneko_hit->set_type(1);
/* sound hardware */
SPEAKER(config, "mono").front_center();
OKIM6295(config, m_oki[0], XTAL(16'000'000)/8, okim6295_device::PIN7_LOW); /* verified on pcb */
m_oki[0]->add_route(ALL_OUTPUTS, "mono", 0.5);
m_oki[0]->set_addrmap(0, &kaneko16_gtmr_state::gtmr_oki1_map);
OKIM6295(config, m_oki[1], XTAL(16'000'000)/8, okim6295_device::PIN7_LOW); /* verified on pcb */
m_oki[1]->add_route(ALL_OUTPUTS, "mono", 0.5);
m_oki[1]->set_addrmap(0, &kaneko16_gtmr_state::gtmr_oki2_map);
}
void kaneko16_gtmr_state::gtmre(machine_config &config)
{
gtmr(config);
m_toybox->set_table(kaneko_toybox_device::TABLE_ALT);
}
/***************************************************************************
Great 1000 Miles Rally 2
***************************************************************************/
void kaneko16_gtmr_state::gtmr2(machine_config &config)
{
gtmre(config);
m_maincpu->set_addrmap(AS_PROGRAM, &kaneko16_gtmr_state::gtmr2_map);
}
/***************************************************************************
Blood Warrior
***************************************************************************/
void kaneko16_gtmr_state::bloodwar(machine_config &config)
{
gtmr(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &kaneko16_gtmr_state::bloodwar_map);
MCFG_MACHINE_RESET_OVERRIDE(kaneko16_gtmr_state, gtmr)
m_kaneko_spr->set_priorities(2 /* never used? */ ,3 /* character selection / vs. portraits */ ,5 /* winning portrait*/ ,7 /* ? */);
}
/***************************************************************************
Bonk's Adventure
***************************************************************************/
void kaneko16_gtmr_state::bonkadv(machine_config &config)
{
gtmr(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &kaneko16_gtmr_state::bonkadv_map);
MCFG_MACHINE_RESET_OVERRIDE(kaneko16_gtmr_state, gtmr)
m_kaneko_spr->set_priorities(2 /* never used? */ ,3 /* volcano lava on level 2 */ ,5 /* in-game player */ ,7 /* demostration text */);
m_toybox->set_game_type(kaneko_toybox_device::GAME_BONK);
m_kaneko_hit->set_type(0);
}
/***************************************************************************
Magical Crystal
***************************************************************************/
void kaneko16_state::mgcrystl(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(12'000'000)); /* verified on pcb, TMP68HC000N-12 @U31 and X2 is 12MHz */
m_maincpu->set_addrmap(AS_PROGRAM, &kaneko16_state::mgcrystl_map);
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_state::interrupt), "screen", 0, 1);
MCFG_MACHINE_RESET_OVERRIDE(kaneko16_state,mgcrystl)
EEPROM_93C46_16BIT(config, m_eeprom);
WATCHDOG_TIMER(config, m_watchdog);
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
m_screen->set_size(256, 256);
m_screen->set_visarea(0, 256-1, 0+16, 256-16-1);
m_screen->set_screen_update(FUNC(kaneko16_state::screen_update));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_1x4bit_2x4bit);
PALETTE(config, m_palette).set_format(palette_device::xGRB_555, 2048);
KANEKO_TMAP(config, m_view2[0]);
m_view2[0]->set_gfx_region(1);
m_view2[0]->set_offset(0x5b, -0x8, 256, 240);
m_view2[0]->set_gfxdecode_tag("gfxdecode");
KANEKO_TMAP(config, m_view2[1]);
m_view2[1]->set_gfx_region(2);
m_view2[1]->set_offset(0x5b, -0x8, 256, 240);
m_view2[1]->set_gfxdecode_tag("gfxdecode");
KANEKO_VU002_SPRITE(config, m_kaneko_spr);
m_kaneko_spr->set_priorities(2 /* below all */ ,3 /* above tile[0], below the other */ ,5 /* above all */ ,7 /* above all */);
m_kaneko_spr->set_gfxdecode_tag("gfxdecode");
/* sound hardware */
SPEAKER(config, "mono").front_center();
YM2149(config, m_ym2149[0], XTAL(12'000'000)/6); /* verified on pcb */
m_ym2149[0]->add_route(ALL_OUTPUTS, "mono", 1.0);
YM2149(config, m_ym2149[1], XTAL(12'000'000)/6); /* verified on pcb */
m_ym2149[1]->add_route(ALL_OUTPUTS, "mono", 1.0);
m_ym2149[1]->port_a_read_callback().set(FUNC(kaneko16_state::eeprom_r)); /* inputs A: 0,EEPROM bit read */
m_ym2149[1]->port_b_write_callback().set(FUNC(kaneko16_state::eeprom_cs_w)); /* outputs B: 0,EEPROM reset */
OKIM6295(config, m_oki[0], XTAL(12'000'000)/6, okim6295_device::PIN7_HIGH); /* verified on pcb */
m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0);
}
/***************************************************************************
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
*/
TIMER_DEVICE_CALLBACK_MEMBER(kaneko16_shogwarr_state::shogwarr_interrupt)
{
int scanline = param;
if(scanline == 224)
{
// the code for this interrupt is provided by the MCU..
m_maincpu->set_input_line(4, HOLD_LINE);
}
if(scanline == 64)
m_maincpu->set_input_line(3, HOLD_LINE);
if(scanline == 144)
m_maincpu->set_input_line(2, HOLD_LINE);
}
/*
static const u16 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 u16 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
};
void kaneko16_shogwarr_state::shogwarr(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(12'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &kaneko16_shogwarr_state::shogwarr_map);
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_shogwarr_state::shogwarr_interrupt), "screen", 0, 1);
MCFG_MACHINE_RESET_OVERRIDE(kaneko16_shogwarr_state,mgcrystl)
EEPROM_93C46_16BIT(config, m_eeprom).default_data(shogwarr_default_eeprom, 128);
WATCHDOG_TIMER(config, m_watchdog);
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(59.1854);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
m_screen->set_size(320, 240);
m_screen->set_visarea(40, 296-1, 16, 240-1);
m_screen->set_screen_update(FUNC(kaneko16_shogwarr_state::screen_update));
m_screen->set_palette(m_palette);
m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_1x4bit_1x4bit);
PALETTE(config, m_palette).set_format(palette_device::xGRB_555, 2048);
KANEKO_TMAP(config, m_view2[0]);
m_view2[0]->set_gfx_region(1);
m_view2[0]->set_offset(0x33, -0x8, 320, 240);
m_view2[0]->set_gfxdecode_tag("gfxdecode");
KANEKO_VU002_SPRITE(config, m_kaneko_spr);
m_kaneko_spr->set_priorities(1 /* below all */ ,3 /* above tile[0], below the others */ ,5 /* above all */ ,7 /* above all */);
m_kaneko_spr->set_offsets(0xa00, -0x40);
m_kaneko_spr->set_fliptype(1);
m_kaneko_spr->set_gfxdecode_tag("gfxdecode");
KANEKO_HIT(config, m_kaneko_hit);
m_kaneko_hit->set_type(1);
KANEKO_CALC3(config, m_calc3_prot, m_maincpu, m_eeprom, "calc3_rom");
/* sound hardware */
SPEAKER(config, "mono").front_center();
OKIM6295(config, m_oki[0], XTAL(16'000'000)/8, okim6295_device::PIN7_LOW);
m_oki[0]->set_addrmap(0, &kaneko16_shogwarr_state::gtmr_oki1_map);
m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0);
OKIM6295(config, m_oki[1], XTAL(16'000'000)/8, okim6295_device::PIN7_LOW);
m_oki[1]->set_addrmap(0, &kaneko16_shogwarr_state::gtmr_oki2_map);
m_oki[1]->add_route(ALL_OUTPUTS, "mono", 1.0);
}
static const u16 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
};
// sample banking is different on brap boys for the music, why? GALs / PALs ?
void kaneko16_shogwarr_state::brapboys_oki2_map(address_map &map)
{
map(0x00000, 0x1ffff).rom();
map(0x20000, 0x3ffff).bankr("okibank2");
}
void kaneko16_shogwarr_state::brapboys(machine_config &config)
{
shogwarr(config);
m_oki[1]->set_addrmap(0, &kaneko16_shogwarr_state::brapboys_oki2_map);
m_kaneko_hit->set_type(2);
m_eeprom->default_data(brapboys_default_eeprom, 128);
}
/***************************************************************************
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.
*/
void kaneko16_state::unscramble_tiles(const char *region)
{
memory_region *tile_region = memregion(region);
if (tile_region == nullptr)
{
return;
}
u8 *ram = tile_region->base();
int size = tile_region->bytes();
for (int i = 0; i < size; i ++)
{
ram[i] = ((ram[i] & 0xF0) >> 4) + ((ram[i] & 0x0F) << 4);
}
}
void kaneko16_state::common_oki_bank_install(int bankno, size_t fixedsize, size_t bankedsize)
{
assert((m_okibank[bankno].found()) && (m_okiregion[bankno].found()));
u8 *sample = m_okiregion[bankno]->base();
size_t length = m_okiregion[bankno]->bytes();
if (fixedsize > 0)
{
int max_bank = (length - fixedsize) / bankedsize;
m_okibank[bankno]->configure_entries(0, max_bank, &sample[fixedsize], bankedsize);
int i = max_bank;
while (i < length / bankedsize)
{
m_okibank[bankno]->configure_entry(i++, &sample[length - bankedsize]);
}
}
else
{
m_okibank[bankno]->configure_entries(0, length / bankedsize, &sample[0], bankedsize);
}
}
void kaneko16_gtmr_state::common_oki_bank_install(int bankno, size_t fixedsize, size_t bankedsize)
{
assert((m_okibank[bankno].found()) && (m_okiregion[bankno].found()));
u8 *sample = m_okiregion[bankno]->base();
size_t length = m_okiregion[bankno]->bytes();
/* bank 0 maps to itself, so we just leave it alone */
if (fixedsize > 0)
{
int bank_offs = fixedsize / bankedsize;
int i = 0;
while (i < bank_offs)
{
m_okibank[bankno]->configure_entry(i++, &sample[fixedsize]);
}
m_okibank[bankno]->configure_entries(bank_offs, (length - fixedsize) / bankedsize, &sample[fixedsize], bankedsize);
}
else
{
m_okibank[bankno]->configure_entries(0, length / bankedsize, &sample[0], bankedsize);
}
}
void kaneko16_state::init_kaneko16()
{
unscramble_tiles("gfx2");
unscramble_tiles("gfx3");
}
void kaneko16_state::init_bakubrkr()
{
common_oki_bank_install(0, 0x20000, 0x20000);
init_kaneko16();
}
/*
berlwallt 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),...
berlwallt 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 berlwallt may be bootleg! because
stage 1-1 of berlwallt is stage 1-3 of berlwall, and berlwall has
explanation ingame.
(TAFA flyers exist for both berlwall and berlwallt player graphics)
--------------------------------------------------------------------------------
*/
// TODO: this is certainly a protection issue, the level number variable can go up to 0x2f, which is way bigger than 0xd.
// Sprite DMA decryption? @see berlwall_spriteram_r
void kaneko16_berlwall_state::patch_protection(u32 bra_offset,u16 bra_value,u16 checksum)
{
m_mainregion[bra_offset/2] = bra_value;
m_mainregion[0x3fffe/2] = checksum;
}
void kaneko16_berlwall_state::init_berlwall_common()
{
unscramble_tiles("gfx2");
}
void kaneko16_berlwall_state::init_berlwall()
{
init_berlwall_common();
patch_protection(0x1a3ea,0x602c,0xc40d);
}
void kaneko16_berlwall_state::init_berlwallt()
{
init_berlwall_common();
patch_protection(0x1cf48,0x602c,0xaed4);
}
void kaneko16_berlwall_state::init_berlwallk()
{
init_berlwall_common();
patch_protection(0x1ceb0,0x602c,0x8364);
}
void kaneko16_gtmr_state::init_gtmr()
{
common_oki_bank_install(0, 0x30000, 0x10000);
common_oki_bank_install(1, 0x00000, 0x40000);
init_kaneko16();
}
/***************************************************************************
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 ) /* MASTER UP= 92/10/08 20:10:16 */
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) )
/* $00000-$20000 stays the same in all sound banks, */
/* the second half of the bank is what gets switched */
ROM_REGION( 0x100000, "oki1", 0 ) /* OKI Sample ROM */
ROM_LOAD( "ts030.u5", 0x000000, 0x100000, CRC(1d68e9d1) SHA1(aaa64a8e8d7cd7f91d2be346fafb9d1f29b40eda) )
ROM_END
ROM_START( explbrkrk ) /* MASTER UP= 92/10/08 21:35:56 - No "For use in Korea.." but has the KA+<cat image> logo which was only used in Korea; the Kaneko logo is scratched out on all custom ICs */
ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "u18", 0x000000, 0x040000, CRC(08267644) SHA1(8a5c638b414d2b1a8bb68e0d8ba6747253734e82) ) /* TMS 27C020 with non descript label "MF" */
ROM_LOAD16_BYTE( "u19", 0x000001, 0x040000, CRC(f0a243b1) SHA1(3448c85c9388b590ea28b9adcaf81b68c14c678c) ) /* TMS 27C020 with non descript label "MF" */
/* 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) )
/* $00000-$20000 stays the same in all sound banks, */
/* the second half of the bank is what gets switched */
ROM_REGION( 0x100000, "oki1", 0 ) /* OKI Sample ROM */
ROM_LOAD( "ts030.u5", 0x000000, 0x100000, CRC(1d68e9d1) SHA1(aaa64a8e8d7cd7f91d2be346fafb9d1f29b40eda) )
ROM_END
ROM_START( bakubrkr ) /* MASTER UP= 92/10/08 20:56:03 */
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) )
/* $00000-$20000 stays the same in all sound banks, */
/* the second half of the bank is what gets switched */
ROM_REGION( 0x100000, "oki1", 0 ) /* OKI Sample ROM */
ROM_LOAD( "ts030.u5", 0x000000, 0x100000, CRC(1d68e9d1) SHA1(aaa64a8e8d7cd7f91d2be346fafb9d1f29b40eda) )
ROM_END
/***************************************************************************
The Berlin Wall
The Berlin Wall, Kaneko 1991, BW-002
(berlwallt set)
----
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
GAL16V8A-25LP : BW-U47 & BW-U48 (backgrounds encryption), BW-U54
***************************************************************************/
ROM_START( berlwall )
ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "bw100e_u23-01.u23", 0x000000, 0x020000, CRC(76b526ce) SHA1(95ba7cccbe88fd695c28b6a7c25a1afd130c1aa6) )
ROM_LOAD16_BYTE( "bw101e_u39-01.u39", 0x000001, 0x020000, CRC(78fa7ef2) SHA1(8392de6e307dcd2bf5bcbeb37d578d33246acfcf) )
ROM_REGION( 0x100000, "gfx1", 0 ) /* Sprites */
ROM_LOAD( "bw001.u84", 0x000000, 0x080000, CRC(bc927260) SHA1(44273a8b6a041504d54da4a7897adf23e3e9db10) )
ROM_LOAD( "bw002.u83", 0x080000, 0x080000, CRC(223f5465) SHA1(6ed077514ab4370a215a4a60c3aecc8b72ed1c97) )
ROM_REGION( 0x080000, "gfx2", 0 ) /* Tiles (Scrambled) */
ROM_LOAD( "bw003.u77", 0x000000, 0x080000, CRC(fbb4b72d) SHA1(07a0590f18b3bba1843ef6a89a5c214e8e605cc3) )
ROM_REGION( 0x400000, "gfx3", 0 ) /* High Color Background */
ROM_LOAD16_BYTE( "bw004.u73", 0x000000, 0x080000, CRC(5300c34d) SHA1(ccb12ea05f89ef68bcfe003faced2ffea24c4bf0) )
ROM_LOAD16_BYTE( "bw008.u65", 0x000001, 0x080000, CRC(9aaf2f2f) SHA1(1352856159e19f07e8e30f9c44b21347103ce024) ) // FIXED BITS (xxxxxxx0)
ROM_LOAD16_BYTE( "bw005.u74", 0x100000, 0x080000, CRC(16db6d43) SHA1(0158d0278d085487400ad4384b8cc9618503319e) )
ROM_LOAD16_BYTE( "bw009.u66", 0x100001, 0x080000, CRC(1151a0b0) SHA1(584a0da7eb7f06450f95e76faa20d19f053cb74c) ) // FIXED BITS (xxxxxxx0)
ROM_LOAD16_BYTE( "bw006.u75", 0x200000, 0x080000, CRC(73a35d1f) SHA1(af919cf858c5923aea45e0d8d91493e6284cb99e) )
ROM_LOAD16_BYTE( "bw00a.u67", 0x200001, 0x080000, CRC(f447dfc2) SHA1(1254eafea92e8e416deedf21cb01990ffc4f896c) ) // FIXED BITS (xxxxxxx0)
ROM_LOAD16_BYTE( "bw007.u76", 0x300000, 0x080000, CRC(97f85c87) SHA1(865e076e098c49c96639f62be793f2de24b4926b) )
ROM_LOAD16_BYTE( "bw00b.u68", 0x300001, 0x080000, CRC(b0a48225) SHA1(de256bb6e2a824114274bff0c6c1234934c31c49) ) // FIXED BITS (xxxxxxx0)
ROM_REGION( 0x040000, "oki1", 0 ) /* Samples */
ROM_LOAD( "bw000.u46", 0x000000, 0x040000, CRC(d8fe869d) SHA1(75e9044c4164ca6db9519fcff8eca6c8a2d8d5d1) )
ROM_REGION( 0x600, "plds", 0 ) /* 3 x GAL16V8A-25LP */
ROM_LOAD( "bw_u47.u47", 0x000, 0x0117, NO_DUMP)
ROM_LOAD( "bw_u48.u48", 0x200, 0x0117, NO_DUMP)
ROM_LOAD( "bw_u54.u54", 0x400, 0x0117, NO_DUMP)
ROM_END
ROM_START( berlwallt )
ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "bw100a.u23", 0x000000, 0x020000, CRC(e6bcb4eb) SHA1(220b8fddc79230b4f6a8cf33e1035355c485e8d1) )
ROM_LOAD16_BYTE( "bw101a.u39", 0x000001, 0x020000, CRC(38056fb2) SHA1(48338b9a5ebea872286541a3c45016673c4af76b) )
ROM_REGION( 0x120000, "gfx1", 0 ) /* Sprites */
ROM_LOAD( "bw001.u84", 0x000000, 0x080000, CRC(bc927260) SHA1(44273a8b6a041504d54da4a7897adf23e3e9db10) )
ROM_LOAD( "bw002.u83", 0x080000, 0x080000, CRC(223f5465) SHA1(6ed077514ab4370a215a4a60c3aecc8b72ed1c97) )
ROM_LOAD( "bw300.u82", 0x100000, 0x020000, CRC(b258737a) SHA1(b5c8fe44a8dcfc19bccba896bdb73030c5843544) ) // Masked players, Japanese text
ROM_REGION( 0x080000, "gfx2", 0 ) /* Tiles (Scrambled) */
ROM_LOAD( "bw003.u77", 0x000000, 0x080000, CRC(fbb4b72d) SHA1(07a0590f18b3bba1843ef6a89a5c214e8e605cc3) )
ROM_REGION( 0x400000, "gfx3", 0 ) /* High Color Background */
ROM_LOAD16_BYTE( "bw004.u73", 0x000000, 0x080000, CRC(5300c34d) SHA1(ccb12ea05f89ef68bcfe003faced2ffea24c4bf0) )
ROM_LOAD16_BYTE( "bw008.u65", 0x000001, 0x080000, CRC(9aaf2f2f) SHA1(1352856159e19f07e8e30f9c44b21347103ce024) ) // FIXED BITS (xxxxxxx0)
ROM_LOAD16_BYTE( "bw005.u74", 0x100000, 0x080000, CRC(16db6d43) SHA1(0158d0278d085487400ad4384b8cc9618503319e) )
ROM_LOAD16_BYTE( "bw009.u66", 0x100001, 0x080000, CRC(1151a0b0) SHA1(584a0da7eb7f06450f95e76faa20d19f053cb74c) ) // FIXED BITS (xxxxxxx0)
ROM_LOAD16_BYTE( "bw006.u75", 0x200000, 0x080000, CRC(73a35d1f) SHA1(af919cf858c5923aea45e0d8d91493e6284cb99e) )
ROM_LOAD16_BYTE( "bw00a.u67", 0x200001, 0x080000, CRC(f447dfc2) SHA1(1254eafea92e8e416deedf21cb01990ffc4f896c) ) // FIXED BITS (xxxxxxx0)
ROM_LOAD16_BYTE( "bw007.u76", 0x300000, 0x080000, CRC(97f85c87) SHA1(865e076e098c49c96639f62be793f2de24b4926b) )
ROM_LOAD16_BYTE( "bw00b.u68", 0x300001, 0x080000, CRC(b0a48225) SHA1(de256bb6e2a824114274bff0c6c1234934c31c49) ) // FIXED BITS (xxxxxxx0)
ROM_REGION( 0x040000, "oki1", 0 ) /* Samples */
ROM_LOAD( "bw000.u46", 0x000000, 0x040000, CRC(d8fe869d) SHA1(75e9044c4164ca6db9519fcff8eca6c8a2d8d5d1) )
ROM_REGION( 0x600, "plds", 0 ) /* 3 x GAL16V8A-25LP */
ROM_LOAD( "bw_u47.u47", 0x000, 0x0117, NO_DUMP)
ROM_LOAD( "bw_u48.u48", 0x200, 0x0117, NO_DUMP)
ROM_LOAD( "bw_u54.u54", 0x400, 0x0117, NO_DUMP)
ROM_END
/* This set definitely comes from an original board but suffers the same 'COPY BOARD' issue in MAME, will be checked on the PCB shortly */
ROM_START( berlwallk )
ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "bw100k.u23", 0x000000, 0x020000, CRC(0ce1d336) SHA1(9dbff4a72f03dd506726c3b305fd0a32e7da4ee1) )
ROM_LOAD16_BYTE( "bw101k.u39", 0x000001, 0x020000, CRC(3355be65) SHA1(bc3506236ee2f37b3cba7c4d8fe1b4dad61b06f1) )
ROM_REGION( 0x120000, "gfx1", 0 ) /* Sprites */
ROM_LOAD( "bw001.u84", 0x000000, 0x080000, CRC(bc927260) SHA1(44273a8b6a041504d54da4a7897adf23e3e9db10) )
ROM_LOAD( "bw002.u83", 0x080000, 0x080000, CRC(223f5465) SHA1(6ed077514ab4370a215a4a60c3aecc8b72ed1c97) )
ROM_LOAD( "bw300k.u82", 0x100000, 0x020000, CRC(b8de79d7) SHA1(c9a78aa213105f3657349995aca2866bc6d80093) )
ROM_REGION( 0x080000, "gfx2", 0 ) /* Tiles (Scrambled) */
ROM_LOAD( "bw003.u77", 0x000000, 0x080000, CRC(fbb4b72d) SHA1(07a0590f18b3bba1843ef6a89a5c214e8e605cc3) )
ROM_REGION( 0x400000, "gfx3", 0 ) /* High Color Background */
ROM_LOAD16_BYTE( "bw004.u73", 0x000000, 0x080000, CRC(5300c34d) SHA1(ccb12ea05f89ef68bcfe003faced2ffea24c4bf0) )
ROM_LOAD16_BYTE( "bw008.u65", 0x000001, 0x080000, CRC(9aaf2f2f) SHA1(1352856159e19f07e8e30f9c44b21347103ce024) ) // FIXED BITS (xxxxxxx0)
ROM_LOAD16_BYTE( "bw005.u74", 0x100000, 0x080000, CRC(16db6d43) SHA1(0158d0278d085487400ad4384b8cc9618503319e) )
ROM_LOAD16_BYTE( "bw009.u66", 0x100001, 0x080000, CRC(1151a0b0) SHA1(584a0da7eb7f06450f95e76faa20d19f053cb74c) ) // FIXED BITS (xxxxxxx0)
ROM_LOAD16_BYTE( "bw006.u75", 0x200000, 0x080000, CRC(73a35d1f) SHA1(af919cf858c5923aea45e0d8d91493e6284cb99e) )
ROM_LOAD16_BYTE( "bw00a.u67", 0x200001, 0x080000, CRC(f447dfc2) SHA1(1254eafea92e8e416deedf21cb01990ffc4f896c) ) // FIXED BITS (xxxxxxx0)
ROM_LOAD16_BYTE( "bw007.u76", 0x300000, 0x080000, CRC(97f85c87) SHA1(865e076e098c49c96639f62be793f2de24b4926b) )
ROM_LOAD16_BYTE( "bw00b.u68", 0x300001, 0x080000, CRC(b0a48225) SHA1(de256bb6e2a824114274bff0c6c1234934c31c49) ) // FIXED BITS (xxxxxxx0)
ROM_REGION( 0x040000, "oki1", 0 ) /* Samples */
ROM_LOAD( "bw000k.u46", 0x000000, 0x040000, CRC(52e81a50) SHA1(0adf6b42dee244dba2a4fb237155b04699b0254f) )
ROM_REGION( 0x600, "plds", 0 ) /* 3 x GAL16V8A-25LP */
ROM_LOAD( "bw_u47.u47", 0x000, 0x0117, NO_DUMP)
ROM_LOAD( "bw_u48.u48", 0x200, 0x0117, NO_DUMP)
ROM_LOAD( "bw_u54.u54", 0x400, 0x0117, NO_DUMP)
ROM_END
ROM_START( packbang ) /* same PCB as Berlin Wall - BW-002 */
ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "bbp0x3.u23", 0x000000, 0x020000, CRC(105e978a) SHA1(d2aa72a25b70726ebe4b16bfe16da149bb37cd85) ) /* hand written checksum on label - 527B */
ROM_LOAD16_BYTE( "bbp1x3.u39", 0x000001, 0x020000, CRC(465d36f5) SHA1(d3bc9e5d444e086652d2bc562d9adfb8a1fd0d2d) ) /* hand written checksum on label - C5C8 */
ROM_REGION( 0x120000, "gfx1", 0 ) /* Sprites */
ROM_LOAD( "bb.u84", 0x000000, 0x080000, CRC(97837aaa) SHA1(303780621afea01f9e4d1386229c7421307562ec) )
ROM_LOAD( "pb_spr_ext_9_20_ver.u83", 0x080000, 0x040000, CRC(666a1217) SHA1(0d7b08d63b229d70b7e9e77a36516a695533c4cb) ) /* hand written label plus checksum BA63 */
ROM_REGION( 0x080000, "gfx2", 0 ) /* Tiles (Scrambled) */
ROM_LOAD( "bbbox1.u77", 0x000000, 0x080000, CRC(b2ffd081) SHA1(e4b8b60ed0c5f2e0709477cc840864e1c0a351ea) ) // 1ST AND 2ND HALF IDENTICAL
ROM_REGION( 0x400000, "gfx3", 0 ) /* High Color Background */
ROM_LOAD16_BYTE( "bb.u73", 0x000000, 0x080000, CRC(896d88cb) SHA1(7546e64149d8d8e3425d9112a7a63b2d2e59b8bb) )
ROM_LOAD16_BYTE( "bb.u65", 0x000001, 0x080000, CRC(fe17c5b5) SHA1(daea65bd87d2137526250d521f36f122f733fd9d) ) // FIXED BITS (xxxxxxx0)
ROM_LOAD16_BYTE( "bb.u74", 0x100000, 0x080000, CRC(b01e77b9) SHA1(73f3adaf6468f4e9c54bff63268af1765cfc5f67) )
ROM_LOAD16_BYTE( "bb.u66", 0x100001, 0x080000, CRC(caec5098) SHA1(9966cd643abe498f84a9e01bc32003f4654584de) ) // FIXED BITS (xxxxxxx0)
ROM_LOAD16_BYTE( "bb.u75", 0x200000, 0x080000, CRC(5cb4669f) SHA1(ab061f5b34435dca46f710ea8118c919a3a9f87c) )
ROM_LOAD16_BYTE( "bb.u67", 0x200001, 0x080000, CRC(ce5c9417) SHA1(30aca496d1f4218b44a32b3630e58889f0c54564) ) // FIXED BITS (xxxxxxx0)
ROM_REGION( 0x040000, "oki1", 0 ) /* Samples */
ROM_LOAD( "bw000.u46", 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( 0x100000, "maincpu", ROMREGION_ERASEFF ) /* 68000 Code */
ROM_LOAD16_BYTE( "bz-prg1.u80", 0x000000, 0x040000, CRC(3d79aa70) SHA1(419088bd4330c674ec395612e0ef4296638080be) )
ROM_LOAD16_BYTE( "bz-prg2.u81", 0x000001, 0x040000, CRC(a16d3b1e) SHA1(45b205cad4401255725c649353ca86d4204efcfd) )
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_sp1.u68", 0x000000, 0x100000, CRC(0d5809a1) SHA1(e72669f95b050d1967d10a865bab8f3634c9daad) )
ROM_LOAD( "bz_sp2.u21", 0x100000, 0x100000, CRC(56ead2bd) SHA1(463723f3c533603ce3a95310e9ce12b4e582b52d) )
ROM_LOAD( "bz_sp2.u86", 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
ROM_START( blazeonj )
ROM_REGION( 0x100000, "maincpu", ROMREGION_ERASEFF ) /* 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_sp1.u68", 0x000000, 0x100000, CRC(0d5809a1) SHA1(e72669f95b050d1967d10a865bab8f3634c9daad) )
ROM_LOAD( "bz_sp2.u21", 0x100000, 0x100000, CRC(56ead2bd) SHA1(463723f3c533603ce3a95310e9ce12b4e582b52d) )
ROM_LOAD( "bz_sp2.u86", 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
/***************************************************************************
Wing Force (Japan, prototype)
Proto board without the later Z09AF-00x's Toybox protection MCU.
The missing chip "KD" at U97 is a 74 pqfp just like the Toybox and connected to U92
where the MCU code would be as well as connected to the EEPROM.
Half way between the Blaze On board and the later Toybox protected Z09AF boards.
Z08AT-001 PCB:
Toshiba TMP68HC000N-16
2 x VU-002
VIEW2-CHIP
MUX2-CHIP
HELP1-CHIP
YM2151
Y3014B
ATMEL AT93C46 @ U82 (EEPROM, looks like all its pins go to the unpopulated KD MCU)
DSW8
XTALs: 16.0000 MHz, 13.3330 MHz
ATLAS-SUB PCB:
NEC D780C-2 @ U1
OKI M6295 @ U4
TL082CP @ U7 (Wide Bandwidth Dual JFET Input Operational AMP)
ROMS:
Name Size Location Device Note
E_2.24.U80 524288 U80 27C040 32 pin riser
O_2.24.U81 524288 U81 27C040 32 pin riser
SP0M.U1 524288 U1 27C040 32 pin riser
SP1M.U1 524288 U1 27C040 32 pin riser
BG0AM.U2 524288 U2 27C040 42 pin riser
BG0BM.U2 524288 U2 27C040 42 pin riser
BG1AM.U3 524288 U3 27C040 42 pin riser
BG1BM.U3 524288 U3 27C040 42 pin riser
SP2M.U20 524288 U20 27C040 32 pin riser
SP3M.U20 524288 U20 27C040 32 pin riser
SP2M.U68 524288 U68 27C040 32 pin riser
SP3M.U68 524288 U68 27C040 32 pin riser
SP0M.U69 524288 U69 27C040 32 pin riser
SP1M.U69 524288 U69 27C040 32 pin riser
S-DRV_2.22.U45 U45 27512 under ATLAS SUB
PCM.U5 524288 U5 27C040 ATLAS SUB
EEPROM.U7 U7 TL082 ATLAS SUB, not dumped
Video from the PCB:
http://tmblr.co/ZgJvzv1-0SVG1
***************************************************************************/
ROM_START( wingforc )
ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "e_2.24.u80", 0x000000, 0x80000, CRC(837e0726) SHA1(349013edc5ccdfd05ae022563e6a831ce98e4a1a) )
ROM_LOAD16_BYTE( "o_2.24.u81", 0x000001, 0x80000, CRC(b6983437) SHA1(0a124e64ad37f9381f8a10a7b462a29563c2ccd9) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 Code */
ROM_LOAD( "s-drv_2.22.u45", 0x00000, 0x10000, CRC(ccdc2758) SHA1(5c0448a70306bd7574f35056ad45ffcbd4a866a8) )
ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */
// two sprite chips, roms are doubled
ROM_LOAD( "sp0m.u69", 0x000000, 0x80000, CRC(8be26a05) SHA1(5b54cd74235c0e32a234ddbe9cf26817700451f1) )
ROM_LOAD( "sp0m.u1", 0x000000, 0x80000, CRC(8be26a05) SHA1(5b54cd74235c0e32a234ddbe9cf26817700451f1) )
ROM_LOAD( "sp1m.u1", 0x080000, 0x80000, CRC(ad8c5b68) SHA1(438b58df301a06266284aad63e19d607d7e9f726) )
ROM_LOAD( "sp1m.u69", 0x080000, 0x80000, CRC(ad8c5b68) SHA1(438b58df301a06266284aad63e19d607d7e9f726) )
ROM_LOAD( "sp2m.u20", 0x100000, 0x80000, CRC(b5994bda) SHA1(66bd9664e31ac0c831a1c538d895386cabb03ac8) )
ROM_LOAD( "sp2m.u68", 0x100000, 0x80000, CRC(b5994bda) SHA1(66bd9664e31ac0c831a1c538d895386cabb03ac8) )
ROM_LOAD( "sp3m.u20", 0x180000, 0x80000, CRC(889ddf72) SHA1(1eaeb4580133d38185ff52fbdc445744c207a202) )
ROM_LOAD( "sp3m.u68", 0x180000, 0x80000, CRC(889ddf72) SHA1(1eaeb4580133d38185ff52fbdc445744c207a202) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* Tiles (Scrambled) */
ROM_LOAD16_BYTE( "bg0am.u2", 0x000000, 0x80000, CRC(f4276860) SHA1(8c0848d43ec07f88734993a996a62919979c75ea) )
ROM_LOAD16_BYTE( "bg0bm.u2", 0x000001, 0x80000, CRC(9df92283) SHA1(53bcac1d63b7bb84b664507906ee768a83be28c9) )
ROM_LOAD16_BYTE( "bg1am.u3", 0x100000, 0x80000, CRC(a44fdebb) SHA1(676ade63d22818c7a7adf39d42aad41fa93319d2) )
ROM_LOAD16_BYTE( "bg1bm.u3", 0x100001, 0x80000, CRC(a9b9fc5d) SHA1(33db691007a8cf25aea6b87a0f009c50df2676f2) )
/* $00000-$20000 stays the same in all sound banks, */
/* the second half of the bank is what gets switched */
ROM_REGION( 0x80000, "oki1", 0 ) /* OKI Sample ROM */
ROM_LOAD( "pcm.u5", 0x00000, 0x80000, CRC(233569fd) SHA1(eb835008bcb961528c0ef4ca72e44ee08c517b81) )
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, "maincpu", 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( 0x100000, "oki1", 0 ) /* Samples */
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, "maincpu", 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( 0x100000, "oki1", 0 ) /* Samples */
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, "maincpu", 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",0x000000,0,0x200000) // it isn't on the board twice.
ROM_REGION( 0x100000, "oki1", 0 ) /* Samples */
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, "maincpu", 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",0x000000,0,0x200000) // it isn't on the board twice.
ROM_REGION( 0x100000, "oki1", 0 ) /* Samples */
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( gtmrb )
ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "mmp0x1.u514", 0x000000, 0x080000, CRC(6c163f12) SHA1(7f33d1475dcb754c83f68b5fb686fb236ba81256) )
ROM_LOAD16_BYTE( "mmp1x1.u513", 0x000001, 0x080000, CRC(424dc7e1) SHA1(a9cb8d1fd0549c8c77462552c649c180c30eef89) )
ROM_REGION( 0x020000, "mcudata", 0 ) /* MCU Code */
ROM_LOAD16_WORD_SWAP( "mmd0x1.u124", 0x000000, 0x020000, CRC(3d7cb329) SHA1(053106acde642a414fde0b01105fe6762b6a10f6) ) // == mmd0x2
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( "mms1x1.u30", 0x800001, 0x020000, CRC(9463825c) SHA1(696bbfc816b564b3cff1487e1b848d375951f923) )
ROM_LOAD16_BYTE( "mms0x1.u29", 0x800000, 0x020000, CRC(bd22b7d2) SHA1(ef82d00d72439590c71aed33ecfabc6ee71a6ff9) ) // == mms0x2
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",0x000000,0,0x200000) // it isn't on the board twice.
ROM_REGION( 0x100000, "oki1", 0 ) /* Samples */
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( gtmro )
ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "u514.bin", 0x000000, 0x080000, CRC(2e857685) SHA1(43b6d88df51a3b4fb0cb910f63a5ec26b06e216a) )
ROM_LOAD16_BYTE( "u513.bin", 0x000001, 0x080000, CRC(d5003870) SHA1(6a4353fa8f94a119c23f232861d790f50be26ea8) )
ROM_REGION( 0x020000, "mcudata", 0 ) /* MCU Code */
ROM_LOAD16_WORD_SWAP( "mmd0x0.u124", 0x000000, 0x020000, CRC(e1f6159e) SHA1(e4af85036756482d6fa27494842699e2647809c7) )
ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprites */
ROM_LOAD16_BYTE( "mm200-e.bin", 0x000000, 0x100000, CRC(eb104408) SHA1(a7805597161dc5acd2804d607dd0acac0c40111d) )
ROM_LOAD16_BYTE( "mm200-o.bin", 0x000001, 0x100000, CRC(b6d04e7c) SHA1(1fa9d6b967724ed0c9e6ae3eda7089a081120d54) )
ROM_LOAD16_BYTE( "mm201-e.bin", 0x200000, 0x100000, CRC(b8c64e14) SHA1(8e2b19f0ba715dfdf0d423a41989e715145adbeb) )
ROM_LOAD16_BYTE( "mm201-o.bin", 0x200001, 0x100000, CRC(3ecd6c0a) SHA1(cb48564e2bd3014eeaad9cfa589bdef3f828c282) )
ROM_LOAD16_BYTE( "mm202-e.bin", 0x400000, 0x100000, CRC(f0fd5688) SHA1(a3f5edfef253c81b27434519b0b9527f6c9a6e82) )
ROM_LOAD16_BYTE( "mm202-o.bin", 0x400001, 0x100000, CRC(e0fe1b2b) SHA1(e66bd09eed6dfea524d8610a3c7e1792a1ff6286) )
ROM_LOAD16_BYTE( "mm203-e.bin", 0x600000, 0x100000, CRC(b9001f28) SHA1(b112c17b960a535a543565ca2e22734c7c510f18) )
ROM_LOAD16_BYTE( "mm203-o.bin", 0x600001, 0x100000, CRC(2ed6227d) SHA1(d9abbb739ef15437194c90cd01d5d82dbd4b7859) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* Tiles (scrambled) */
ROM_LOAD16_BYTE( "mm300-e.u53", 0x000000, 0x100000, CRC(f9ee708d) SHA1(4c11a9574ea815a87d7e4af04db4368b14bf7530) )
ROM_LOAD16_BYTE( "mm300-o.u54", 0x000001, 0x100000, CRC(76299353) SHA1(01997905ba019d770ac1998633f4ebf6f91a3945) )
ROM_REGION( 0x200000, "gfx3", 0 ) /* Tiles (scrambled) */
ROM_COPY("gfx2",0x000000,0,0x200000) // it isn't on the board twice.
ROM_REGION( 0x100000, "oki1", 0 ) /* Samples */
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