diff options
Diffstat (limited to 'docs/release/src/mame')
-rw-r--r-- | docs/release/src/mame/drivers/jrpacman.cpp | 462 | ||||
-rw-r--r-- | docs/release/src/mame/drivers/konamigx.cpp | 4007 | ||||
-rw-r--r-- | docs/release/src/mame/drivers/model2.cpp | 7042 | ||||
-rw-r--r-- | docs/release/src/mame/includes/mhavoc.h | 102 | ||||
-rw-r--r-- | docs/release/src/mame/machine/mhavoc.cpp | 332 | ||||
-rw-r--r-- | docs/release/src/mame/video/decbac06.cpp | 632 |
6 files changed, 12577 insertions, 0 deletions
diff --git a/docs/release/src/mame/drivers/jrpacman.cpp b/docs/release/src/mame/drivers/jrpacman.cpp new file mode 100644 index 00000000000..90afa40c44b --- /dev/null +++ b/docs/release/src/mame/drivers/jrpacman.cpp @@ -0,0 +1,462 @@ +// license:BSD-3-Clause +// copyright-holders:Nicola Salmoria +/*************************************************************************** + + Bally/Midway Jr. Pac-Man + + Games supported: + * Jr. Pac-Man + + Known issues: + * none + +**************************************************************************** + + Jr. Pac Man memory map (preliminary) + + 0000-3fff ROM + 4000-47ff Video RAM (also color RAM) + 4800-4fff RAM + 8000-dfff ROM + + memory mapped ports: + + read: + 5000 P1 + 5040 P2 + 5080 DSW + + * + * IN0 (all bits are inverted) + * bit 7 : CREDIT + * bit 6 : COIN 2 + * bit 5 : COIN 1 + * bit 4 : RACK TEST + * bit 3 : DOWN player 1 + * bit 2 : RIGHT player 1 + * bit 1 : LEFT player 1 + * bit 0 : UP player 1 + * + * + * IN1 (all bits are inverted) + * bit 7 : TABLE or UPRIGHT cabinet select (1 = UPRIGHT) + * bit 6 : START 2 + * bit 5 : START 1 + * bit 4 : TEST SWITCH + * bit 3 : DOWN player 2 (TABLE only) + * bit 2 : RIGHT player 2 (TABLE only) + * bit 1 : LEFT player 2 (TABLE only) + * bit 0 : UP player 2 (TABLE only) + * + * + * DSW1 (all bits are inverted) + * bit 7 : ? + * bit 6 : difficulty level + * 1 = Normal 0 = Harder + * bit 5 :\ bonus pac at xx000 pts + * bit 4 :/ 00 = 10000 01 = 15000 10 = 20000 11 = 30000 + * bit 3 :\ nr of lives + * bit 2 :/ 00 = 1 01 = 2 10 = 3 11 = 5 + * bit 1 :\ play mode + * bit 0 :/ 00 = free play 01 = 1 coin 1 credit + * 10 = 1 coin 2 credits 11 = 2 coins 1 credit + * + + write: + 4ff2-4ffd 6 pairs of two bytes: + the first byte contains the sprite image number (bits 2-7), Y flip (bit 0), + X flip (bit 1); the second byte the color + 5000 interrupt enable + 5001 sound enable + 5002 unused + 5003 flip screen + 5004 unused + 5005 unused + 5006 unused + 5007 coin counter + 5040-5044 sound voice 1 accumulator (nibbles) (used by the sound hardware only) + 5045 sound voice 1 waveform (nibble) + 5046-5049 sound voice 2 accumulator (nibbles) (used by the sound hardware only) + 504a sound voice 2 waveform (nibble) + 504b-504e sound voice 3 accumulator (nibbles) (used by the sound hardware only) + 504f sound voice 3 waveform (nibble) + 5050-5054 sound voice 1 frequency (nibbles) + 5055 sound voice 1 volume (nibble) + 5056-5059 sound voice 2 frequency (nibbles) + 505a sound voice 2 volume (nibble) + 505b-505e sound voice 3 frequency (nibbles) + 505f sound voice 3 volume (nibble) + 5062-506d Sprite coordinates, x/y pairs for 6 sprites + 5070 palette bank + 5071 colortable bank + 5073 background priority over sprites + 5074 char gfx bank + 5075 sprite gfx bank + 5080 scroll + 50c0 Watchdog reset + + I/O ports: + OUT on port $0 sets the interrupt vector + +***************************************************************************/ + +#include "emu.h" +#include "includes/pacman.h" + +#include "cpu/z80/z80.h" +#include "machine/74259.h" +#include "screen.h" +#include "speaker.h" + + +class jrpacman_state : public pacman_state +{ +public: + jrpacman_state(const machine_config &mconfig, device_type type, const char *tag) + : pacman_state(mconfig, type, tag) { } + + void jrpacman(machine_config &config); + + void init_jrpacman(); + +private: + DECLARE_WRITE8_MEMBER(jrpacman_interrupt_vector_w); + DECLARE_WRITE_LINE_MEMBER(irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(vblank_irq); + void main_map(address_map &map); + void port_map(address_map &map); +}; + + + +WRITE8_MEMBER(jrpacman_state::jrpacman_interrupt_vector_w) +{ + m_maincpu->set_input_line_vector(0, data); // Z80 + m_maincpu->set_input_line(0, CLEAR_LINE); +} + +WRITE_LINE_MEMBER(jrpacman_state::irq_mask_w) +{ + m_irq_mask = state; +} + +/************************************* + * + * Main CPU memory handlers + * + *************************************/ + +void jrpacman_state::main_map(address_map &map) +{ + map(0x0000, 0x3fff).rom(); + map(0x4000, 0x47ff).ram().w(FUNC(jrpacman_state::jrpacman_videoram_w)).share("videoram"); + map(0x4800, 0x4fef).ram(); + map(0x4ff0, 0x4fff).ram().share("spriteram"); + map(0x5000, 0x503f).portr("P1"); + map(0x5000, 0x5007).w("latch1", FUNC(ls259_device::write_d0)); + map(0x5040, 0x507f).portr("P2"); + map(0x5040, 0x505f).w(m_namco_sound, FUNC(namco_device::pacman_sound_w)); + map(0x5060, 0x506f).writeonly().share("spriteram2"); + map(0x5070, 0x5077).w("latch2", FUNC(ls259_device::write_d0)); + map(0x5080, 0x50bf).portr("DSW"); + map(0x5080, 0x5080).w(FUNC(jrpacman_state::jrpacman_scroll_w)); + map(0x50c0, 0x50c0).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); + map(0x8000, 0xdfff).rom(); +// HBMAME extras + map(0x5002, 0x5002).nopw(); + map(0x5004, 0x5005).w(this, FUNC(pacman_state::pacman_leds_w)); + map(0x5006, 0x5006).nopw(); + map(0x5007, 0x5007).nopw(); + map(0x5072, 0x5072).nopw(); + map(0x5076, 0x507f).nopw(); + map(0xfffc, 0xffff).ram(); /* for jrfast and fastjr */ +} + + +void jrpacman_state::port_map(address_map &map) +{ + map.global_mask(0xff); + map(0, 0).w(FUNC(jrpacman_state::jrpacman_interrupt_vector_w)); +} + + + +/************************************* + * + * Port definitions + * + *************************************/ + +static INPUT_PORTS_START( jrpacman ) + PORT_START("P1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY + /* Press this to instantly finish the level - HBMAME */ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Finish Level (Cheat)") PORT_CODE(KEYCODE_8) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) + + PORT_START("P2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL + PORT_SERVICE( 0x10, IP_ACTIVE_LOW ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) + + PORT_START("DSW") + PORT_DIPNAME( 0x03, 0x01, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1,2") + PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x0c, 0x08, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:3,4") + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x04, "2" ) + PORT_DIPSETTING( 0x08, "3" ) + PORT_DIPSETTING( 0x0c, "5" ) + PORT_DIPNAME( 0x30, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:5,6") + PORT_DIPSETTING( 0x00, "10000" ) + PORT_DIPSETTING( 0x10, "15000" ) + PORT_DIPSETTING( 0x20, "20000" ) + PORT_DIPSETTING( 0x30, "30000" ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:7") + PORT_DIPSETTING( 0x40, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + +// HBMAME extras + PORT_START ("FAKE") + /* This fake input port is used to get the status of the fire button */ + /* and activate the speedup cheat. */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME( "Speed (Cheat)" ) + PORT_DIPNAME( 0x06, 0x02, "Speed Cheat" ) + PORT_DIPSETTING( 0x00, "Disabled" ) + PORT_DIPSETTING( 0x02, "Enabled with Button" ) + PORT_DIPSETTING( 0x04, "Enabled Always" ) + + PORT_START ("CONFIG") + PORT_CONFNAME( 0x01, 0x01, "Level" ) + PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) + PORT_CONFSETTING( 0x01, DEF_STR( On ) ) +INPUT_PORTS_END + + + +/************************************* + * + * Graphics layouts + * + *************************************/ + +static const gfx_layout tilelayout = +{ + 8,8, + RGN_FRAC(1,2), + 2, + { 0, 4 }, + { STEP4(8*8,1), STEP4(0*8,1) }, + { STEP8(0*8,8) }, + 16*8 +}; + + +static const gfx_layout spritelayout = +{ + 16,16, + RGN_FRAC(1,2), + 2, + { 0, 4 }, + { STEP4(8*8,1), STEP4(16*8,1), STEP4(24*8,1), STEP4(0*8,1) }, + { STEP8(0*8,8), STEP8(32*8,8) }, + 64*8 +}; + + +static GFXDECODE_START( gfx_jrpacman ) + GFXDECODE_ENTRY( "gfx1", 0x0000, tilelayout, 0, 128 ) + GFXDECODE_ENTRY( "gfx1", 0x2000, spritelayout, 0, 128 ) +GFXDECODE_END + + + +/************************************* + * + * Machine drivers + * + *************************************/ + +WRITE_LINE_MEMBER(jrpacman_state::vblank_irq) +{ + if (state && m_irq_mask) + m_maincpu->set_input_line(0, HOLD_LINE); +} + +void jrpacman_state::jrpacman(machine_config &config) +{ + /* basic machine hardware */ + Z80(config, m_maincpu, 18432000/6); /* 3.072 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &jrpacman_state::main_map); + m_maincpu->set_addrmap(AS_IO, &jrpacman_state::port_map); + + ls259_device &latch1(LS259(config, "latch1")); // 5P + latch1.q_out_cb<0>().set(FUNC(jrpacman_state::irq_mask_w)); + latch1.q_out_cb<1>().set("namco", FUNC(namco_device::sound_enable_w)); + latch1.q_out_cb<3>().set(FUNC(jrpacman_state::flipscreen_w)); + latch1.q_out_cb<7>().set(FUNC(jrpacman_state::coin_counter_w)); + + ls259_device &latch2(LS259(config, "latch2")); // 1H + latch2.q_out_cb<0>().set(FUNC(jrpacman_state::pengo_palettebank_w)); + latch2.q_out_cb<1>().set(FUNC(jrpacman_state::pengo_colortablebank_w)); + latch2.q_out_cb<3>().set(FUNC(jrpacman_state::jrpacman_bgpriority_w)); + latch2.q_out_cb<4>().set(FUNC(jrpacman_state::jrpacman_charbank_w)); + latch2.q_out_cb<5>().set(FUNC(jrpacman_state::jrpacman_spritebank_w)); + + WATCHDOG_TIMER(config, m_watchdog); + + /* video hardware */ + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60.606060); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(36*8, 28*8); + screen.set_visarea(0*8, 36*8-1, 0*8, 28*8-1); + screen.set_screen_update(FUNC(jrpacman_state::screen_update_pacman)); + screen.set_palette(m_palette); + //screen.screen_vblank().set(FUNC(jrpacman_state::vblank_irq)); // HBMAME + screen.screen_vblank().set(FUNC(jrpacman_state::pacman_interrupt)); // HBMAME + + GFXDECODE(config, m_gfxdecode, m_palette, gfx_jrpacman); + PALETTE(config, m_palette, FUNC(jrpacman_state::pacman_palette), 128 * 4, 32); + + MCFG_VIDEO_START_OVERRIDE(jrpacman_state,jrpacman) + + /* sound hardware */ + SPEAKER(config, "mono").front_center(); + + NAMCO(config, m_namco_sound, 3072000/32); + m_namco_sound->set_voices(3); + m_namco_sound->add_route(ALL_OUTPUTS, "mono", 1.0); +} + + + +/************************************* + * + * ROM definitions + * + *************************************/ + +ROM_START( jrpacman ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "jrp8d.8d", 0x0000, 0x2000, CRC(e3fa972e) SHA1(5ea34621213c649ca2848ab31aab2cbe751723d4) ) + ROM_LOAD( "jrp8e.8e", 0x2000, 0x2000, CRC(ec889e94) SHA1(8294e9e79f8fd19a419431fa690e6ac4a1302f58) ) + ROM_LOAD( "jrp8h.8h", 0x8000, 0x2000, CRC(35f1fc6e) SHA1(b84b34560b9aae18b24274712b052283faa01730) ) + ROM_LOAD( "jrp8j.8j", 0xa000, 0x2000, CRC(9737099e) SHA1(07d912a61824323c8fc1b8bd0da89172d4f70b91) ) + ROM_LOAD( "jrp8k.8k", 0xc000, 0x2000, CRC(5252dd97) SHA1(18bd4d5381656120e4242811006c20776774de4d) ) + + ROM_REGION( 0x4000, "gfx1", 0 ) + ROM_LOAD( "jrp2c.2c", 0x0000, 0x2000, CRC(0527ff9b) SHA1(37fe3176b0d125b7d629e108e7ebdc1196e4a132) ) /* tiles (bank 1 & 2) */ + ROM_LOAD( "jrp2e.2e", 0x2000, 0x2000, CRC(73477193) SHA1(f00a488958ea0438642d345693787bdf771219ad) ) /* sprites (bank 1 & 2) */ + + ROM_REGION( 0x0120, "proms", 0 ) + ROM_LOAD_NIB_LOW ( "a290-27axv-bxhd.9e", 0x0000, 0x0100, CRC(029d35c4) SHA1(d9aa2dc442e9ac36cf3c346b9fb1aa745eaf3cb8) ) /* color palette (low bits) */ + ROM_LOAD_NIB_HIGH( "a290-27axv-cxhd.9f", 0x0000, 0x0100, CRC(eee34a79) SHA1(7561f8ccab2af85c111af6a02af6986eb67503e5) ) /* color palette (high bits) */ + ROM_LOAD( "a290-27axv-axhd.9p", 0x0020, 0x0100, CRC(9f6ea9d8) SHA1(62cf15513934d34641433c891a7f73bef82e2fb1) ) /* color lookup table */ + + ROM_REGION( 0x0200, "namco", 0 ) + ROM_LOAD( "a290-27axv-dxhd.7p", 0x0000, 0x0100, CRC(a9cc86bf) SHA1(bbcec0570aeceb582ff8238a4bc8546a23430081) ) /* waveform */ + ROM_LOAD( "a290-27axv-exhd.5s", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( jrpacmanf ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "fast_jr.8d", 0x0000, 0x2000, CRC(461e8b57) SHA1(42e25d384e653efb95a97bd64f55a8c3b3f71239) ) // only 1 byte difference + ROM_LOAD( "jrp8e.8e", 0x2000, 0x2000, CRC(ec889e94) SHA1(8294e9e79f8fd19a419431fa690e6ac4a1302f58) ) + ROM_LOAD( "jrp8h.8h", 0x8000, 0x2000, CRC(35f1fc6e) SHA1(b84b34560b9aae18b24274712b052283faa01730) ) + ROM_LOAD( "jrp8j.8j", 0xa000, 0x2000, CRC(9737099e) SHA1(07d912a61824323c8fc1b8bd0da89172d4f70b91) ) + ROM_LOAD( "jrp8k.8k", 0xc000, 0x2000, CRC(5252dd97) SHA1(18bd4d5381656120e4242811006c20776774de4d) ) + + ROM_REGION( 0x4000, "gfx1", 0 ) + ROM_LOAD( "jrp2c.2c", 0x0000, 0x2000, CRC(0527ff9b) SHA1(37fe3176b0d125b7d629e108e7ebdc1196e4a132) ) /* tiles (bank 1 & 2) */ + ROM_LOAD( "jrp2e.2e", 0x2000, 0x2000, CRC(73477193) SHA1(f00a488958ea0438642d345693787bdf771219ad) ) /* sprites (bank 1 & 2) */ + + ROM_REGION( 0x0120, "proms", 0 ) + ROM_LOAD_NIB_LOW ( "a290-27axv-bxhd.9e", 0x0000, 0x0100, CRC(029d35c4) SHA1(d9aa2dc442e9ac36cf3c346b9fb1aa745eaf3cb8) ) /* color palette (low bits) */ + ROM_LOAD_NIB_HIGH( "a290-27axv-cxhd.9f", 0x0000, 0x0100, CRC(eee34a79) SHA1(7561f8ccab2af85c111af6a02af6986eb67503e5) ) /* color palette (high bits) */ + ROM_LOAD( "a290-27axv-axhd.9p", 0x0020, 0x0100, CRC(9f6ea9d8) SHA1(62cf15513934d34641433c891a7f73bef82e2fb1) ) /* color lookup table */ + + ROM_REGION( 0x0200, "namco", 0 ) + ROM_LOAD( "a290-27axv-dxhd.7p", 0x0000, 0x0100, CRC(a9cc86bf) SHA1(bbcec0570aeceb582ff8238a4bc8546a23430081) ) /* waveform */ + ROM_LOAD( "a290-27axv-exhd.5s", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + + + +/************************************* + * + * Driver initialization + * + *************************************/ + +void jrpacman_state::init_jrpacman() +{ + /* The encryption PALs garble bits 0, 2 and 7 of the ROMs. The encryption */ + /* scheme is complex (basically it's a state machine) and can only be */ + /* faithfully emulated at run time. To avoid the performance hit that would */ + /* cause, here we have a table of the values which must be XORed with */ + /* each memory region to obtain the decrypted bytes. */ + /* Decryption table provided by David Caldwell (david@indigita.com) */ + /* For an accurate reproduction of the encryption, see jrcrypt.c */ + static const struct { + int count; + int value; + } table[] = + { + { 0x00C1, 0x00 },{ 0x0002, 0x80 },{ 0x0004, 0x00 },{ 0x0006, 0x80 }, + { 0x0003, 0x00 },{ 0x0002, 0x80 },{ 0x0009, 0x00 },{ 0x0004, 0x80 }, + { 0x9968, 0x00 },{ 0x0001, 0x80 },{ 0x0002, 0x00 },{ 0x0001, 0x80 }, + { 0x0009, 0x00 },{ 0x0002, 0x80 },{ 0x0009, 0x00 },{ 0x0001, 0x80 }, + { 0x00AF, 0x00 },{ 0x000E, 0x04 },{ 0x0002, 0x00 },{ 0x0004, 0x04 }, + { 0x001E, 0x00 },{ 0x0001, 0x80 },{ 0x0002, 0x00 },{ 0x0001, 0x80 }, + { 0x0002, 0x00 },{ 0x0002, 0x80 },{ 0x0009, 0x00 },{ 0x0002, 0x80 }, + { 0x0009, 0x00 },{ 0x0002, 0x80 },{ 0x0083, 0x00 },{ 0x0001, 0x04 }, + { 0x0001, 0x01 },{ 0x0001, 0x00 },{ 0x0002, 0x05 },{ 0x0001, 0x00 }, + { 0x0003, 0x04 },{ 0x0003, 0x01 },{ 0x0002, 0x00 },{ 0x0001, 0x04 }, + { 0x0003, 0x01 },{ 0x0003, 0x00 },{ 0x0003, 0x04 },{ 0x0001, 0x01 }, + { 0x002E, 0x00 },{ 0x0078, 0x01 },{ 0x0001, 0x04 },{ 0x0001, 0x05 }, + { 0x0001, 0x00 },{ 0x0001, 0x01 },{ 0x0001, 0x04 },{ 0x0002, 0x00 }, + { 0x0001, 0x01 },{ 0x0001, 0x04 },{ 0x0002, 0x00 },{ 0x0001, 0x01 }, + { 0x0001, 0x04 },{ 0x0002, 0x00 },{ 0x0001, 0x01 },{ 0x0001, 0x04 }, + { 0x0001, 0x05 },{ 0x0001, 0x00 },{ 0x0001, 0x01 },{ 0x0001, 0x04 }, + { 0x0002, 0x00 },{ 0x0001, 0x01 },{ 0x0001, 0x04 },{ 0x0002, 0x00 }, + { 0x0001, 0x01 },{ 0x0001, 0x04 },{ 0x0001, 0x05 },{ 0x0001, 0x00 }, + { 0x01B0, 0x01 },{ 0x0001, 0x00 },{ 0x0002, 0x01 },{ 0x00AD, 0x00 }, + { 0x0031, 0x01 },{ 0x005C, 0x00 },{ 0x0005, 0x01 },{ 0x604E, 0x00 }, + { 0,0 } + }; + + uint8_t *RAM = memregion("maincpu")->base(); + for (int i = 0, A = 0; table[i].count; i++) + for (int j = 0; j < table[i].count; j++) + RAM[A++] ^= table[i].value; +} + + + +/************************************* + * + * Game drivers + * + *************************************/ + +GAME( 1983, jrpacman, 0, jrpacman, jrpacman, jrpacman_state, init_jrpacman, ROT90, "Bally Midway", "Jr. Pac-Man (11/9/83)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, jrpacmanf, jrpacman, jrpacman, jrpacman, jrpacman_state, init_jrpacman, ROT90, "hack", "Jr. Pac-Man (speedup hack)", MACHINE_SUPPORTS_SAVE ) diff --git a/docs/release/src/mame/drivers/konamigx.cpp b/docs/release/src/mame/drivers/konamigx.cpp new file mode 100644 index 00000000000..b841ca023d2 --- /dev/null +++ b/docs/release/src/mame/drivers/konamigx.cpp @@ -0,0 +1,4007 @@ +// license:BSD-3-Clause +// copyright-holders:R. Belmont, Acho A. Tang, Phil Stroffolino, Olivier Galibert +/************************************************************************** + * + * konamigx.cpp - Konami System GX + * Driver by R. Belmont, Acho A. Tang, and Phil Stroffolino. + * ESC protection emulation by Olivier Galibert. + * + * Basic hardware consists of: + * - MC68EC020 main CPU at 24 MHz + * - MC68000 sound CPU with 2x K054539 PCM chips plus a TMS57002 DASP for effects + * + * Tilemaps are handled by the old familiar K054156 with a new partner K056832. + * This combination is mostly compatible with the 156/157 combo but now sports + * up to 8 bits per pixel as well as larger 128x64 tile planes. + * + * Sprites are handled by a K053246 combined with a K055673. This combo was + * actually used on some 16 bit Konami games as well. It appears identical + * to the standard 246/247 combo except with 5-8 bits per pixel. + * + * Video output is handled by a K055555 mixer/priority encoder. This is a much + * more capable beast than the earlier 53251, supporting a background gradient + * and flexible priority handling among other features. It's combined with the + * 54338 alpha blending engine first seen in Xexex for flexible blending. + * + * There are actually 4 types of System GX hardware, which are differentiated + * by their ROM board. The most common is the "Type 2". + * + * 68020 memory map for Type 2: + * 000000: BIOS ROM (128k) + * 200000: game program ROM (1 meg, possibly up to 2) + * 400000: data ROMs + * c00000: Work RAM (128k) + * cc0000: Protection chip + * d00000: 054157 ROM readback for memory test + * d20000: sprite RAM (4k) + * d40000: 054157/056832 tilemap generator (VACSET) + * d44000: tile bank selectors (VSCCS) + * d48000: 053246/055673 sprite generator (OBJSET1) + * d4a000: more readback for sprite generator (OBJSET2) + * d4c000: CCU1 registers (CCUS1) + * 00: HCH 6M/288 8M/384 12M/576 224 256 + * 02: HCL HCH 01 01 02 VCH 01 01 + * 04: HFPH HCL 7f ff ff VCL 07 20 + * 06: HFPL HFPH 00 00 00 VFP 11 0c + * 08: HBPH HFPL 10 19 23 VBP 0e 0e + * 0A: HBPL HBPH 00 00 00 VSW 07 05 + * 10: VCH HBPL 30 3f 4d + * 12: VCL HSW 03 04 09 + * 14: VFP + * 16: VBP + * 18: VSW/HSW + * 1A: INT TIME + * 1C: INT1ACK (read VCTH) INT1 = V blank + * 1E: INT2ACK (read VCTL) INT2 = H blank + * d4e000: CCU2 registers (CCUS2) + * d50000: K055555 8-bit-per-pixel priority encoder (PCUCS) + * d52000: shared RAM with audio 68000 (SOUNDCS) + * d56000: EEPROM comms, bit 7 is watchdog, bit 5 is frame?? (WRPOR1) + * d56001: IRQ acknowledge (bits 0->3 = irq 1->4), IRQ enable in hi nibble (bits 4->7 = irq 1->4) + * d58000: control register (OBJCHA, 68000 enable/disable, probably more) (WRPOR2) + * d5a000: dipswitch bank 1 (RDPORT1) + * d5a001: dipswitch bank 2 + * d5a002: input port (service switch) + * d5a003: EEPROM data/ready in bit 0 + * d5c000: player 1 inputs (RDPORT2) + * d5c001: player 2 inputs + * d5e000: test switch (RDPORT3) + * d80000: K054338 alpha blender registers + * d90000: palette RAM for tilemaps + * da0000: tilemap RAM (8k window, bankswitched by d40033) + * dc0000: LANCRAMCS + * dd0000: LANCIOCS + * dd2000: RS232C-1 + * dd4000: RS232C-2 + * dd6000: trackball 1 + * dd8000: trackball 2 + * dda000: ADC-WRPORT + * ddc000: ADC-RDPORT + * dde000: EXT-WRPORT + * de0000: EXT_RDPORT + * e00000: type3/4: PSAC2 registers + * e20000: type3/4: unk. register + * e40000: type3/4: unk. register + * e60000: type3/4: PSAC2 linecontrol RAM + * e80000: type3/4: main monitor's palette + * ea0000: type3/4: sub monitor's palette + * ec0000: type3/4: frame flag + * f00000: 32k of RnG2 additional RAM + * + * IRQs: + * 1: VBL (at 60 Hz) + * 2: HBL + * 3: Sprite DMA complete + * 4: from protection device, indicates command completion for "ESC" chip + * + */ + +#include "emu.h" +#include "includes/konamigx.h" + +#include "cpu/m68000/m68000.h" +#include "cpu/tms57002/tms57002.h" +#include "cpu/z80/z80.h" +#include "machine/eepromser.h" +#include "sound/k054539.h" +#include "sound/k056800.h" +#include "rendlay.h" +#include "speaker.h" + + +// TODO: check on PCB +#define MASTER_CLOCK XTAL(24'000'000) +#define SUB_CLOCK XTAL(16'000'000) + +/**********************************************************************************/ +/* + Konami ESC (E Security Chip) protection chip found on: + - Salamander 2 + - Sexy Parodius + - Twinbee Yahhoo + - Dragoon Might + - Daisu-Kiss + + The ESC is a custom microcontroller with external SRAM connected + to it. It's microprogram is uploaded by the host game. The ESC + has complete DMA access to the entire 68020 address space, like + most Konami protection devices. + + Most games use the same or a compatible microprogram. This + program gathers the sprite information scattered around work RAM + and builds a sprite list in sprite RAM which is properly sorted + in priority order. The Japanese version of Gokujou Parodius + contains a 68020 version of this program at 0x2a285c. The code + below is almost a direct translation into C of that routine. + + Salamander 2 uses a different work RAM format and a different + ESC program, and Dragoon Might uses a third format and program. + These games haven't been reverse-engineered yet and so have + no sprites. + + Winning Spike and the Type 4 games use a new protection chip + made from a Xilinx FPGA. See type4_prot_w for details. + +*/ + +/* constant names mostly taken from sexy parodius, which includes + a debug protection routine with asserts intact! Cracking the ESC + would have been much more difficult without it. + */ + +#define ESC_INIT_CONSTANT 0x0108db04 +#define ESC_OBJECT_MAGIC_ID 0xfef724fb +#define ESTATE_END 2 +#define ESTATE_ERROR 3 + +// opcode 1 +// dragoonj +// ESC Opcode 1 : 000000xx 000000xx 00000xx0 00000000 +// tbyahhoo sprites at c00000 +// ESC Opcode 1 : 0000ffff 0000ffff 0000ffff 0000000e +// sexyparo sprites at c00604 +// ESC Opcode 1 : 00000000 00000000 00d20000 00000000 +// ESC Opcode 1 : 00000000 00000000 00d21000 00000000 +// salmndr2 +// ESC Opcode 1 : 00c1f7f8 0022002c 00c00060 00010014 +// tokkae +// ESC Opcode 1 : 00c00000 0000000x 00000023 0000ffff +// puzldama +// ESC Opcode 1 : 002xxxxx 00236102 xxxxxx01 xxxxxxxx + +// Say hello to gokuparo at 0x2a285c + +/*! +@todo + - Daisu Kiss: sets up 0x00257e28 as set variable in a 2p game after beating specific stages, and causes a game breaking sticky sprite. + It actually also sets up something that looks like non-sprite sub-commands in the same area (example is for character select), I'm inclined to think upper bits are actually used for something else: + 00010005 + 00000006 + 000e0002 + 002e0080 + - Sexy Parodius: sets up p1 as 2 at start of stage 1, 4 during stage 3A (attract mode), p4 is autoincremented at each gameplay frame. Related to missing effects? + - Tokimeki Memorial: wrong horizontal flip for mode select arrows; + */ + +static struct sprite_entry { + int pri; + uint32_t adr; +} sprites[0x100]; + +void konamigx_state::generate_sprites(address_space &space, uint32_t src, uint32_t spr, int count) +{ + int scount = 0; + int ecount = 0; + + for(int i=0; i<count; i++) { + uint32_t adr = src + 0x100*i; + int pri; + if(!space.read_word(adr+2)) + continue; + pri = space.read_word(adr+28); + + if(pri < 256) { + sprites[ecount].pri = pri; + sprites[ecount].adr = adr; + ecount++; + } + } + //qsort(sprites, ecount, sizeof(struct sprite_entry), pri_comp); + + for(int i=0; i<ecount; i++) { + uint32_t adr = sprites[i].adr; + if(adr) { + uint32_t set =(space.read_word(adr) << 16)|space.read_word(adr+2); + uint16_t glob_x = space.read_word(adr+4); + uint16_t glob_y = space.read_word(adr+8); + uint16_t flip_x = space.read_word(adr+12) ? 0x1000 : 0x0000; + uint16_t flip_y = space.read_word(adr+14) ? 0x2000 : 0x0000; + uint16_t glob_f = flip_x | (flip_y ^ 0x2000); + uint16_t zoom_x = space.read_word(adr+20); + uint16_t zoom_y = space.read_word(adr+22); + uint16_t color_val = 0x0000; + uint16_t color_mask = 0xffff; + uint16_t color_set = 0x0000; + uint16_t color_rotate = 0x0000; + uint16_t v; + + v = space.read_word(adr+24); + if(v & 0x8000) { + color_mask = 0xf3ff; + color_val |= (v & 3) << 10; + } + + v = space.read_word(adr+26); + if(v & 0x8000) { + color_mask &= 0xfcff; + color_val |= (v & 3) << 8; + } + + v = space.read_word(adr+18); + if(v & 0x8000) { + color_mask &= 0xff1f; + color_val |= v & 0xe0; + } + + v = space.read_word(adr+16); + if(v & 0x8000) + color_set = v & 0x1f; + if(v & 0x4000) + color_rotate = v & 0x1f; + + if(!zoom_x) + zoom_x = 0x40; + if(!zoom_y) + zoom_y = 0x40; + + if(set >= 0x200000 && set < 0xd00000) + { + uint16_t count2 = space.read_word(set); + + set += 2; + while(count2) { + uint16_t idx = space.read_word(set); + uint16_t flip = space.read_word(set+2); + uint16_t col = space.read_word(set+4); + short y = space.read_word(set+6); + short x = space.read_word(set+8); + + if(idx == 0xffff) { + set = (flip<<16) | col; + if(set >= 0x200000 && set < 0xd00000) + continue; + else + break; + } + + if(zoom_y != 0x40) + y = y*0x40/zoom_y; + if(zoom_x != 0x40) + x = x*0x40/zoom_x; + + if(flip_x) + x = glob_x - x; + else + x = glob_x + x; + if(x < -256 || x > 512+32) + goto next; + + if(flip_y) + y = glob_y - y; + else + y = glob_y + y; + if(y < -256 || y > 512) + goto next; + + col = (col & color_mask) | color_val; + if(color_set) + col = (col & 0xffe0) | color_set; + if(color_rotate) + col = (col & 0xffe0) | ((col + color_rotate) & 0x1f); + + space.write_word(spr , (flip ^ glob_f) | sprites[i].pri); + space.write_word(spr+ 2, idx); + space.write_word(spr+ 4, y); + space.write_word(spr+ 6, x); + space.write_word(spr+ 8, zoom_y); + space.write_word(spr+10, zoom_x); + space.write_word(spr+12, col); + spr += 16; + scount++; + if(scount == 256) + return; + next: + count2--; + set += 10; + } + } + } + } + while(scount < 256) { + space.write_word(spr, scount); + scount++; + spr += 16; + } +} + +void konamigx_state::tkmmpzdm_esc(address_space &space, uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4) +{ + konamigx_esc_alert(m_workram, 0x0142, 0x100, 0); +} + +void konamigx_state::dragoonj_esc(address_space &space, uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4) +{ + konamigx_esc_alert(m_workram, 0x5c00, 0x100, 0); +} + +void konamigx_state::sal2_esc(address_space &space, uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4) +{ + konamigx_esc_alert(m_workram, 0x1c8c, 0x172, 1); +} + +void konamigx_state::sexyparo_esc(address_space &space, uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4) +{ + // The d20000 should probably be p3 + // TODO: debugging bootcamp, remove once finished +#ifdef UNUSED_FUNCTION + if (p1 != 0) + { + logerror("sexyparo_esc P1 param: %02x\n", p1); + } +#endif + generate_sprites(space, 0xc00604, 0xd20000, 0xfc); +} + +void konamigx_state::tbyahhoo_esc(address_space &space, uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4) +{ + generate_sprites(space, 0xc00000, 0xd20000, 0x100); +} + +void konamigx_state::daiskiss_esc(address_space &space, uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4) +{ + generate_sprites(space, 0xc00000, 0xd20000, 0x100); +} + +WRITE32_MEMBER(konamigx_state::esc_w) +{ + uint32_t opcode; + uint32_t params; + + /* ignore nullptr writes to the ESC (these appear to be "keepalives" on the real hardware) */ + if (!data) + { + return; + } + + /* ignore out-of-range addresses */ + if ((data < 0xc00000) || (data > 0xc1ffff)) + { + return; + } + + /* the master opcode can be at an unaligned address, so get it "safely" */ + opcode = (space.read_word(data+2))|(space.read_word(data)<<16); + + /* if there's an OBJECT_MAGIC_ID, that means + there is a valid ESC command packet. */ + if (opcode == ESC_OBJECT_MAGIC_ID) + { + int i; + /* get the subop now */ + opcode = space.read_byte(data+8); + params = (space.read_word(data+12) << 16) | space.read_word(data+14); + + switch(opcode) { + case 5: // Reset + break; + case 2: // Load program + for(i=0; i<4096; i++) + m_esc_program[i] = space.read_byte(params+i); +/* + { + FILE *f; + + f = fopen("esc.bin", "wb"); + fwrite(esc_program, 4096, 1, f); + fclose(f); + + logerror("Dumping ESC program\n"); + } +*/ + break; + case 1: // Run program + if(m_esc_cb) { + uint32_t p1 = (space.read_word(params+0)<<16) | space.read_word(params+2); + uint32_t p2 = (space.read_word(params+4)<<16) | space.read_word(params+6); + uint32_t p3 = (space.read_word(params+8)<<16) | space.read_word(params+10); + uint32_t p4 = (space.read_word(params+12)<<16) | space.read_word(params+14); + (this->*m_esc_cb)(space, p1, p2, p3, p4); + } + break; + default: +// logerror("Unknown ESC opcode %d\n", opcode); + break; + } + space.write_byte(data+9, ESTATE_END); + + if (m_gx_wrport1_1 & 0x10) + { + m_gx_rdport1_3 &= ~8; + m_maincpu->set_input_line(4, HOLD_LINE); + } + } + else + { + /* INIT_CONSTANT means just for the ESC to initialize itself, + there is not normal command parsing here. */ + if (opcode == ESC_INIT_CONSTANT) + { +// logerror("Got ESC_INIT_CONSTANT, 'booting' ESC\n"); + return; + } + + /* unknown constant (never been seen in any game..) */ + } +} + +/**********************************************************************************/ +/* EEPROM handlers */ + +CUSTOM_INPUT_MEMBER(konamigx_state::gx_rdport1_3_r) +{ + return (m_gx_rdport1_3 >> 1); +} + +WRITE32_MEMBER(konamigx_state::eeprom_w) +{ + uint32_t odata; + + if (ACCESSING_BITS_24_31) + { + odata = data >> 24; + /* + bit 7: afr, a watchdog timer bit + bit 6: objscan + bit 5: background color select: 0 = 338 solid color, 1 = 5^5 gradient + bit 4: coin counter 2 + bit 3: coin counter 1 + bit 2: eeprom clock + bit 1: eeprom chip select + bit 0: eeprom data + */ + + m_eepromout->write(odata, 0xff); + + machine().bookkeeping().coin_counter_w(0, odata & 0x08); + machine().bookkeeping().coin_counter_w(1, odata & 0x10); + + m_gx_wrport1_0 = odata; + } + + if (ACCESSING_BITS_16_23) + { + /* + bit 7 = mask all IRQ + bit 6 = LAN IRQ enable + bit 5 = CCU2 IRQ enable + bit 4 = ESC IRQ enable + bit 3 = EXCPU IRQ enable + bit 2 = OBJ IRQ enable + bit 1 = CCU1-INT2 enable + bit 0 = CCU1-INT1 enable + */ + + m_gx_wrport1_1 = (data>>16)&0xff; +// logerror("write %x to IRQ register (PC=%x)\n", m_gx_wrport1_1, m_maincpu->pc()); + + // m_gx_syncen is to ensure each IRQ is triggered at least once after being enabled + if (m_gx_wrport1_1 & 0x80) + m_gx_syncen |= m_gx_wrport1_1 & 0x1f; + } +} + +WRITE32_MEMBER(konamigx_state::control_w) +{ + // TODO: derive from reported PCB XTALs + const uint32_t pixclock[4] = { 6'000'000, 8'000'000, 12'000'000, 16'000'000 }; + //logerror("write %x to control register (mask=%x)\n", data, mem_mask); + + // known controls: + // bit 23 = reset graphics chips + // bit 22 = 0 to halt 68000, 1 to let it run (SOUNDRESET) + // bit 21 = VRAM-CHARD 0=VRAM, 1=ROM + // bit 20 = OBJCHA line for '246 + // bit 19 = select top 2 sprite priority bits to be 14/15 or 16/17 of the + // spritelist "color" word. + // bit 18 = if 0, the top 2 sprite priority bits are "11" else use bit 19's + // results. + // bit 17 = DOTSEL1 : 0 = 6M, 1=8M, 2=12M, 3=16M + // bit 16 = DOTSEL0 + if (ACCESSING_BITS_16_23) + { + if (data & 0x400000) + { + // Enable sound CPU and DSP + m_soundcpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); + m_soundcpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); + + if (m_sound_ctrl & 0x10) + m_dasp->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); + } + else + { + m_sound_ctrl = 0; + + // Reset sound CPU and DSP + m_soundcpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); + m_soundcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + m_dasp->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + m_k056832->reset(); + } + + m_k055673->k053246_set_objcha_line((data&0x100000) ? ASSERT_LINE : CLEAR_LINE); + + m_gx_wrport2 = (data>>16)&0xff; + + if(m_prev_pixel_clock != (m_gx_wrport2 & 3)) + { + m_k053252->set_unscaled_clock(pixclock[m_gx_wrport2 & 3]); + m_prev_pixel_clock = m_gx_wrport2 & 3; + } + } +} + + +/**********************************************************************************/ +/* IRQ controllers */ + +TIMER_CALLBACK_MEMBER(konamigx_state::boothack_callback) +{ + // Restore main CPU normal operating frequency + m_maincpu->set_clock_scale(1.0f); +} + +/* + GX object DMA timings: + + 6Mhz dotclock: 42.7us(clear) / 341.3us(transfer) + 8Mhz dotclock: 32.0us(clear) / 256.0us(transfer) + 12Mhz dotclock: 42.7us(clear) / 341.3us(transfer) +*/ + +TIMER_CALLBACK_MEMBER(konamigx_state::dmaend_callback) +{ + // foul-proof (CPU0 could be deactivated while we wait) + if (m_resume_trigger && m_suspension_active) + { + m_suspension_active = 0; + machine().scheduler().trigger(m_resume_trigger); + } + + // DMA busy flag must be cleared before triggering IRQ 3 + m_gx_rdport1_3 &= ~2; + + // IRQ 3 is the "object DMA end" IRQ also happens during vblank + if ((m_gx_wrport1_1 & 0x84) == 0x84 || (m_gx_syncen & 4)) + { + m_gx_syncen &= ~4; + + // lower OBJINT-REQ flag and trigger interrupt + m_gx_rdport1_3 &= ~0x80; + m_maincpu->set_input_line(3, HOLD_LINE); + } +} + +void konamigx_state::dmastart_callback(int data) +{ + int sprite_timing; + + // raise the DMA busy flag + // TODO: is it supposed to raise even if DMA is disabled? + m_gx_rdport1_3 |= 2; + + // begin transfer if DMAEN(bit4 of OBJSET1) is set (see p.48) + if (m_k055673->k053246_read_register(5) & 0x10) + { + // disabled by default since it doesn't work too well in MAME + konamigx_objdma(); + } + + // simulate DMA delay + // TODO: Rushing Heroes doesn't like reported sprite timings, probably due of sprite protection being issued istantly or requires the double buffering ... + if(m_gx_rushingheroes_hack == 1) + sprite_timing = 64; + else + sprite_timing = m_gx_wrport2 & 1 ? (256+32) : (342+42); + m_dmadelay_timer->adjust(attotime::from_usec(sprite_timing)); +} + + +INTERRUPT_GEN_MEMBER(konamigx_state::konamigx_type2_vblank_irq) +{ + // lift idle suspension + if (m_resume_trigger && m_suspension_active) + { + m_suspension_active = 0; + machine().scheduler().trigger(m_resume_trigger); + } + + // IRQ 1 is the main 60hz vblank interrupt + if (m_gx_syncen & 0x20) + { + m_gx_syncen &= ~0x20; + + if ((m_gx_wrport1_1 & 0x81) == 0x81 || (m_gx_syncen & 1)) + { + m_gx_syncen &= ~1; + // TODO: enabling ASSERT_LINE breaks opengolf, annoying. + device.execute().set_input_line(1, HOLD_LINE); + } + } + + dmastart_callback(0); +} + +TIMER_DEVICE_CALLBACK_MEMBER(konamigx_state::konamigx_type2_scanline) +{ + int scanline = param; + + if(scanline == 48) + { + if (m_gx_syncen & 0x40) + { + m_gx_syncen &= ~0x40; + + if ((m_gx_wrport1_1 & 0x82) == 0x82 || (m_gx_syncen & 2)) + { + popmessage("HBlank IRQ enabled, contact MAMEdev"); + m_gx_syncen &= ~2; + m_maincpu->set_input_line(2, HOLD_LINE); + } + } + + } +} + +TIMER_DEVICE_CALLBACK_MEMBER(konamigx_state::konamigx_type4_scanline) +{ + int scanline = param; + + if (scanline == 240) + { + // lift idle suspension + if (m_resume_trigger && m_suspension_active) + { + m_suspension_active = 0; + machine().scheduler().trigger(m_resume_trigger); + } + + // IRQ 1 is the main 60hz vblank interrupt + // the m_gx_syncen & 0x20 test doesn't work on type 3 or 4 ROM boards, likely because the ROM board + // generates the timing in those cases. With this change, rushing heroes and rng2 boot :) + + // maybe this interrupt should only be every 30fps, or maybe there are flags to prevent the game running too fast + // the real hardware should output the display for each screen on alternate frames + // if(device->m_screen->frame_number() & 1) + if (1) // m_gx_syncen & 0x20) + { + m_gx_syncen &= ~0x20; + + if ((m_gx_wrport1_1 & 0x81) == 0x81 || (m_gx_syncen & 1)) + { + m_gx_syncen &= ~1; + m_maincpu->set_input_line(1, HOLD_LINE); + + } + } + + dmastart_callback(0); + } + else if(scanline < 240) // hblank + { + // IRQ 2 is a programmable interrupt with scanline resolution + if (m_gx_syncen & 0x40) + { + m_gx_syncen &= ~0x40; + + if ((m_gx_wrport1_1 & 0x82) == 0x82 || (m_gx_syncen & 2)) + { + m_gx_syncen &= ~2; + m_maincpu->set_input_line(2, HOLD_LINE); + } + } + } +} + + +/**********************************************************************************/ +/* input handlers */ + +/* National Semiconductor ADC0834 4-channel serial ADC emulation */ + +double konamigx_state::adc0834_callback(uint8_t input) +{ + switch (input) + { + case ADC083X_CH0: + return (double)(5 * m_an0->read()) / 255.0; // steer + case ADC083X_CH1: + return (double)(5 * m_an1->read()) / 255.0; // gas + case ADC083X_VREF: + return 5; + } + return 0; +} + + +READ32_MEMBER(konamigx_state::le2_gun_H_r) +{ + int p1x = m_light0_x->read()*290/0xff+20; + int p2x = m_light1_x->read()*290/0xff+20; + + return (p1x<<16)|p2x; +} + +READ32_MEMBER(konamigx_state::le2_gun_V_r) +{ + int p1y = m_light0_y->read()*224/0xff; + int p2y = m_light1_y->read()*224/0xff; + + // make "off the bottom" reload too + if (p1y >= 0xdf) p1y = 0; + if (p2y >= 0xdf) p2y = 0; + + return (p1y<<16)|p2y; +} + +/**********************************************************************************/ +/* system or game dependent handlers */ + +READ32_MEMBER(konamigx_state::type1_roz_r1) +{ + uint32_t *ROM = (uint32_t *)memregion("gfx3")->base(); + + return ROM[offset]; +} + +READ32_MEMBER(konamigx_state::type1_roz_r2) +{ + uint32_t *ROM = (uint32_t *)memregion("gfx3")->base(); + + ROM += (0x600000/2); + + return ROM[offset]; +} + +READ32_MEMBER(konamigx_state::type3_sync_r) +{ + if(m_konamigx_current_frame==0) + return -1; // return 0xfffffffe | 1; + else + return 0;// return 0xfffffffe | 0; +} + + +/* + Run and Gun 2, Rushing Heroes, Winning Spike, and Vs. Net Soccer contain a XILINX FPGA that serves as security. + + RnG2's version is "K002204" + Rushing Heroes' is "K0000035891" + Vs Net Soccer is "003462" + Winning Spike's is "0000032652" + + RnG2's is used to generate the sprite list just like the ESC, among other tasks. (RnG2 sends many commands per frame to the protection). + + Rushing Heroes is much simpler and uses only 1 command during gameplay. They set up a giant table of pointers + at C10200->C102EF (see the routine at 2043CE. C10001 contains which monitor they want to update (main or sub) + and it changes the pointers accordingly). This sets up the palettes, the sprite list, and the ROZ tilemap, from the looks of things. + + Here are the lists constructed by Rushing Heroes (I've reordered the original code so it's in linear address order). + Vs. Net Soccer does the same thing starting at 2064DC (in fact, Rushing Heroes appears to be heavily based on Vs. Net's code). + + main monitor (2043da) sub monitor (204616) + move.l #$C0C000,($C10200).l move.l #$C1C000,($C10200).l + move.l #$C10000,($C10204).l move.l #$C20000,($C10204).l + move.l #$C0C000,($C10208).l move.l #$C1C000,($C10208).l + move.l #$C0C200,($C1020C).l move.l #$C1C200,($C1020C).l + move.l #$C0C200,($C10210).l move.l #$C1C200,($C10210).l + move.l #$C0D800,($C10214).l move.l #$C1D800,($C10214).l + move.l #$C0D800,($C10218).l move.l #$C1D800,($C10218).l + move.l #$C0EE00,($C1021C).l move.l #$C1EE00,($C1021C).l + move.l #$C0EE00,($C10220).l move.l #$C1EE00,($C10220).l + move.l #$C0F200,($C10224).l move.l #$C1F200,($C10224).l + move.l #$C0EE00,($C10228).l move.l #$C1EE00,($C10228).l + move.l #$C0EE00,($C1022C).l move.l #$C1EE00,($C1022C).l + move.l #$C0F000,($C10230).l move.l #$C1F000,($C10230).l + move.l #$C1C200,($C10234).l move.l #$C0C200,($C10234).l + move.l #$C1EE00,($C10238).l move.l #$C0EE00,($C10238).l + move.l #$C0A000,($C1023C).l move.l #$C1A000,($C1023C).l + move.l #$C0C000,($C10240).l move.l #$C1C000,($C10240).l + move.l #$C0A000,($C10244).l move.l #$C1A000,($C10244).l + move.l #$C10000,($C10248).l move.l #$C20000,($C10248).l + move.l #$C0FA00,($C1024C).l move.l #$C1FA00,($C1024C).l + move.l #$C1A000,($C10250).l move.l #$C0A000,($C10250).l + move.l #$C00000,($C10260).l move.l #$C10000,($C10260).l + move.l #$C10000,($C10264).l move.l #$C00000,($C10264).l + move.l #$C00800,($C10268).l move.l #$C10800,($C10268).l + move.l #$C01000,($C1026C).l move.l #$C11000,($C1026C).l + move.l #$C00500,($C10270).l move.l #$C10500,($C10270).l + move.l #$C00520,($C10274).l move.l #$C10520,($C10274).l + move.l #$C00540,($C10278).l move.l #$C10540,($C10278).l + move.l #$C00560,($C1027C).l move.l #$C10560,($C1027C).l + move.l #$C100C0,($C10280).l move.l #$C100E0,($C10280).l + move.l #$C100D0,($C10284).l move.l #$C100F0,($C10284).l + move.l #$C100E0,($C10288).l move.l #$C100C0,($C10288).l + move.l #$C100F0,($C1028C).l move.l #$C100D0,($C1028C).l + move.l #$E82000,($C10290).l move.l #$EA2000,($C10290).l palette segment (E80000 = main monitor palette, EA0000 = sub monitor palette) + move.l #$E83000,($C10294).l move.l #$EA3000,($C10294).l palette segment + move.l #$E84000,($C10298).l move.l #$EA4000,($C10298).l palette segment + move.l #$E85000,($C1029C).l move.l #$EA5000,($C1029C).l palette segment + move.l #$E80000,($C102A0).l move.l #$EA0000,($C102A0).l palette segment + move.l #$E86000,($C102A4).l move.l #$EA6000,($C102A4).l palette segment + move.l #$E86800,($C102A8).l move.l #$EA6800,($C102A8).l palette segment + move.l #$D20000,($C102B0).l move.l #$D21000,($C102B0).l sprite list + move.l #$D21000,($C102B4).l move.l #$D22000,($C102B4).l sprite end + move.l #$C09000,($C102B8).l move.l #$C19000,($C102B8).l + move.l #$C0A000,($C102BC).l move.l #$C1A000,($C102BC).l + move.l #$C00700,($C102C0).l move.l #$C10700,($C102C0).l + move.l #$C00780,($C102C4).l move.l #$C10780,($C102C4).l + move.l #$C10700,($C102C8).l move.l #$C00700,($C102C8).l + move.l #$C10780,($C102CC).l move.l #$C00780,($C102CC).l + move.l #$C02070,($C102D0).l move.l #$C12070,($C102D0).l + move.l #$C09000,($C102D4).l move.l #$C19000,($C102D4).l + move.l #$C12070,($C102D8).l move.l #$C02070,($C102D8).l + move.l #$C19000,($C102DC).l move.l #$C09000,($C102DC).l + move.l #$C12000,($C102E0).l move.l #$C12000,($C102E0).l + move.l #$C20000,($C102E4).l move.l #$C20000,($C102E4).l + move.l #$C10300,($C102E8).l move.l #$C10300,($C102E8).l + move.l #$C10400,($C102EC).l move.l #$C10400,($C102EC).l +*/ + +WRITE32_MEMBER(konamigx_state::type4_prot_w) +{ + int clk; + int i; + + if (offset == 1) + { + m_last_prot_op = data>>16; + } + else + { + data >>= 16; + + clk = data & 0x200; + if ((clk == 0) && (m_last_prot_clk != 0)) + { + if (m_last_prot_op != -1) + { +// osd_printf_debug("type 4 prot command: %x\n", m_last_prot_op); + /* + known commands: + rng2 rushhero vsnet winspike what + ------------------------------------------------------------------------------ + 0a56 0d96 0d14 0d1c memcpy from c01000 to c01400 for 0x400 bytes + 0b16 generate sprite list at c01000 or c08400 (not sure entirely, see routine at 209922 in rungun2) + 0d97 0515 parse big DMA list at c10200 + 057a copy 4 bytes from c00f10 to c10f00 and 4 bytes from c00f30 to c0fe00 + */ + if ((m_last_prot_op == 0xa56) || (m_last_prot_op == 0xd96) || (m_last_prot_op == 0xd14) || (m_last_prot_op == 0xd1c)) + { + // memcpy from c01000 to c01400 for 0x400 bytes (startup check for type 4 games) + for (i = 0; i < 0x400; i += 2) + { + space.write_word(0xc01400+i, space.read_word(0xc01000+i)); + } + } + else if(m_last_prot_op == 0x57a) // winspike + { + /* player 1 input buffer protection */ + space.write_dword(0xc10f00, space.read_dword(0xc00f10)); + space.write_dword(0xc10f04, space.read_dword(0xc00f14)); + /* player 2 input buffer protection */ + space.write_dword(0xc10f20, space.read_dword(0xc00f20)); + space.write_dword(0xc10f24, space.read_dword(0xc00f24)); + /* ... */ + space.write_dword(0xc0fe00, space.read_dword(0xc00f30)); + space.write_dword(0xc0fe04, space.read_dword(0xc00f34)); + } + else if(m_last_prot_op == 0xd97) // rushhero + { + int src = 0xc09ff0; + int dst = 0xd20000; + int spr; + + for (spr = 0; spr < 256; spr++) + { + for (i = 0; i <= 0x10; i += 4) + { + space.write_dword(dst + i, space.read_dword(src+i)); + } + + src -= 0x10; + dst += 0x10; + } + + /* Input buffer copiers, only this command is executed so it's safe to assume that's polled here */ + space.write_byte(0xc01cc0, ~space.read_byte(0xc00507)); + space.write_byte(0xc01cc1, ~space.read_byte(0xc00527)); + space.write_byte(0xc01cc4, ~space.read_byte(0xc00547)); + space.write_byte(0xc01cc5, ~space.read_byte(0xc00567)); + } + else if(m_last_prot_op == 0xb16) // slamdnk2 + { + int src = 0xc01000; + int dst = 0xd20000; + int spr; + + for (spr = 0; spr < 0x100; spr++) + { + space.write_word(dst, space.read_word(src)); + src += 4; + dst += 2; + } + + //maybe here there's a [$d8001f] <- 0x31 write too? + } + else if(m_last_prot_op == 0x515) // vsnetscr screen 1 + { + int adr; + //printf("GXT4: command %x %d (PC=%x)\n", m_last_prot_op, cc++, m_maincpu->pc()); + for (adr = 0; adr < 0x400; adr += 2) + space.write_word(0xc01c00+adr, space.read_word(0xc01800+adr)); + } + else if(m_last_prot_op == 0x115d) // vsnetscr screen 2 + { + int adr; + //printf("GXT4: command %x %d (PC=%x)\n", m_last_prot_op, cc++, m_maincpu->pc()); + for (adr = 0; adr < 0x400; adr += 2) + space.write_word(0xc18c00+adr, space.read_word(0xc18800+adr)); + } + else + { + //printf("GXT4: unknown protection command %x (PC=%x)\n", m_last_prot_op, m_maincpu->pc()); + } + + if (m_gx_wrport1_1 & 0x10) + { + m_gx_rdport1_3 &= ~8; + m_maincpu->set_input_line(4, HOLD_LINE); + } + + // don't accidentally do a phony command + m_last_prot_op = -1; + } + } + m_last_prot_clk = clk; + } +} + +// cabinet lamps for type 1 games +WRITE32_MEMBER(konamigx_state::type1_cablamps_w) +{ + m_lamp = BIT(data, 24); +} + +/**********************************************************************************/ +/* 68EC020 memory handlers */ +/**********************************************************************************/ + +void konamigx_state::gx_base_memmap(address_map &map) +{ + map(0x000000, 0x01ffff).rom(); // BIOS ROM + map(0x200000, 0x3fffff).rom(); // main program ROM + map(0x400000, 0x7fffff).rom(); // data ROM + map(0xc00000, 0xc1ffff).ram().share("workram"); + map(0xd00000, 0xd01fff).r(m_k056832, FUNC(k056832_device::k_5bpp_rom_long_r)); + map(0xd20000, 0xd20fff).rw(m_k055673, FUNC(k055673_device::k053247_word_r), FUNC(k055673_device::k053247_word_w)); + map(0xd21000, 0xd21fff).ram(); // second bank of sprite RAM, accessed thru ESC + map(0xd22000, 0xd23fff).ram(); // extra bank checked at least by sexyparo, pending further investigation. + map(0xd40000, 0xd4003f).w(m_k056832, FUNC(k056832_device::word_w)); + map(0xd44000, 0xd4400f).w(FUNC(konamigx_state::konamigx_tilebank_w)); + map(0xd48000, 0xd48007).w(m_k055673, FUNC(k055673_device::k053246_w)); + map(0xd4a000, 0xd4a00f).r(m_k055673, FUNC(k055673_device::k055673_rom_word_r)); + map(0xd4a010, 0xd4a01f).w(m_k055673, FUNC(k055673_device::k055673_reg_word_w)); + map(0xd4c000, 0xd4c01f).rw(m_k053252, FUNC(k053252_device::read), FUNC(k053252_device::write)).umask32(0xff00ff00); + map(0xd4e000, 0xd4e01f).nopw(); // left-over for "secondary" CCU, apparently (used by type 3/4 for slave screen?) + map(0xd50000, 0xd500ff).w(m_k055555, FUNC(k055555_device::K055555_long_w)); + map(0xd52000, 0xd5201f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w)).umask32(0xff00ff00); + map(0xd56000, 0xd56003).w(FUNC(konamigx_state::eeprom_w)); + map(0xd58000, 0xd58003).w(FUNC(konamigx_state::control_w)); + map(0xd5a000, 0xd5a003).portr("SYSTEM_DSW"); + map(0xd5c000, 0xd5c003).portr("INPUTS"); + map(0xd5e000, 0xd5e003).portr("SERVICE"); + map(0xd80000, 0xd8001f).w(m_k054338, FUNC(k054338_device::word_w)); + map(0xda0000, 0xda1fff).rw(m_k056832, FUNC(k056832_device::ram_word_r), FUNC(k056832_device::ram_word_w)); + map(0xda2000, 0xda3fff).rw(m_k056832, FUNC(k056832_device::ram_word_r), FUNC(k056832_device::ram_word_w)); +} + +void konamigx_state::gx_type1_map(address_map &map) +{ + gx_base_memmap(map); + map(0xd90000, 0xd97fff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette"); + map(0xdc0000, 0xdc1fff).ram(); // LAN RAM? (Racin' Force has, Open Golf doesn't) + map(0xdd0000, 0xdd00ff).nopr().nopw(); // LAN board + map(0xdda000, 0xddafff).portw("ADC-WRPORT"); + map(0xddc000, 0xddcfff).portr("ADC-RDPORT"); + map(0xdde000, 0xdde003).w(FUNC(konamigx_state::type1_cablamps_w)); + map(0xe00000, 0xe0001f).ram().share("k053936_0_ctrl"); + map(0xe20000, 0xe2000f).nopw(); + map(0xe40000, 0xe40003).nopw(); + map(0xe80000, 0xe81fff).ram().share("k053936_0_line"); // chips 21L+19L / S + map(0xec0000, 0xedffff).ram().w(FUNC(konamigx_state::konamigx_t1_psacmap_w)).share("psacram"); // chips 20J+23J+18J / S + map(0xf00000, 0xf3ffff).r(FUNC(konamigx_state::type1_roz_r1)); // ROM readback + map(0xf40000, 0xf7ffff).r(FUNC(konamigx_state::type1_roz_r2)); // ROM readback + map(0xf80000, 0xf80fff).ram(); // chip 21Q / S + map(0xfc0000, 0xfc00ff).ram(); // chip 22N / S +} + +void konamigx_state::gx_type2_map(address_map &map) +{ + gx_base_memmap(map); + map(0xcc0000, 0xcc0003).w(FUNC(konamigx_state::esc_w)); + map(0xd90000, 0xd97fff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette"); +} + +void konamigx_state::gx_type3_map(address_map &map) +{ + gx_base_memmap(map); + map(0xd90000, 0xd97fff).ram(); + //map(0xcc0000, 0xcc0007).w(FUNC(konamigx_state::type4_prot_w)); + map(0xe00000, 0xe0001f).ram().share("k053936_0_ctrl"); + //map(0xe20000, 0xe20003).nopw(); + map(0xe40000, 0xe40003).w(FUNC(konamigx_state::konamigx_type3_psac2_bank_w)).share("psac2_bank"); + map(0xe60000, 0xe60fff).ram().share("k053936_0_line"); + map(0xe80000, 0xe83fff).ram().share("paletteram"); // main monitor palette + map(0xea0000, 0xea3fff).ram().share("subpaletteram"); + map(0xec0000, 0xec0003).r(FUNC(konamigx_state::type3_sync_r)); + //map(0xf00000, 0xf07fff).ram(); +} + +void konamigx_state::gx_type4_map(address_map &map) +{ + gx_base_memmap(map); + map(0xcc0000, 0xcc0007).w(FUNC(konamigx_state::type4_prot_w)); + map(0xd90000, 0xd97fff).ram(); + map(0xe00000, 0xe0001f).ram().share("k053936_0_ctrl"); + map(0xe20000, 0xe20003).nopw(); + map(0xe40000, 0xe40003).nopw(); + map(0xe60000, 0xe60fff).ram().share("k053936_0_line"); // 29C & 29G (PSAC2 line control) + map(0xe80000, 0xe87fff).ram().share("paletteram"); // 11G/13G/15G (main screen palette RAM) + map(0xea0000, 0xea7fff).ram().share("subpaletteram"); // 5G/7G/9G (sub screen palette RAM) + map(0xec0000, 0xec0003).r(FUNC(konamigx_state::type3_sync_r)); // type 4 polls this too + map(0xf00000, 0xf07fff).ram().w(FUNC(konamigx_state::konamigx_t4_psacmap_w)).share("psacram"); // PSAC2 tilemap +// map(0xf00000, 0xf07fff).ram(); +} + +/**********************************************************************************/ +/* Sound handling */ + +READ16_MEMBER(konamigx_state::tms57002_status_word_r) +{ + return (m_dasp->dready_r() ? 4 : 0) | + (m_dasp->pc0_r() ? 2 : 0) | + (m_dasp->empty_r() ? 1 : 0); +} + +WRITE16_MEMBER(konamigx_state::tms57002_control_word_w) +{ + if (ACCESSING_BITS_0_7) + { + if (!(data & 1)) + m_soundcpu->set_input_line(M68K_IRQ_2, CLEAR_LINE); + + m_dasp->pload_w(data & 4); + m_dasp->cload_w(data & 8); + m_dasp->set_input_line(INPUT_LINE_RESET, data & 0x10 ? CLEAR_LINE : ASSERT_LINE); + + m_sound_ctrl = data; + } +} + +/* 68000 memory handling */ +void konamigx_state::gxsndmap(address_map &map) +{ + map(0x000000, 0x03ffff).rom(); + map(0x100000, 0x10ffff).ram(); + map(0x200000, 0x2004ff).rw(m_k054539_1, FUNC(k054539_device::read), FUNC(k054539_device::write)).umask16(0xff00); + map(0x200000, 0x2004ff).rw(m_k054539_2, FUNC(k054539_device::read), FUNC(k054539_device::write)).umask16(0x00ff); + map(0x300001, 0x300001).rw(m_dasp, FUNC(tms57002_device::data_r), FUNC(tms57002_device::data_w)); + map(0x400000, 0x40001f).rw(m_k056800, FUNC(k056800_device::sound_r), FUNC(k056800_device::sound_w)).umask16(0x00ff); + map(0x500000, 0x500001).rw(FUNC(konamigx_state::tms57002_status_word_r), FUNC(konamigx_state::tms57002_control_word_w)); + map(0x580000, 0x580001).nopw(); // 'NRES' - D2: K056602 /RESET +} + +void konamigx_state::gxtmsmap(address_map &map) +{ + map(0x00000, 0x3ffff).ram(); +} + + +WRITE_LINE_MEMBER(konamigx_state::k054539_irq_gen) +{ + if (m_sound_ctrl & 1) + { + // Trigger an interrupt on the rising edge + if (!m_sound_intck && state) + m_soundcpu->set_input_line(M68K_IRQ_2, ASSERT_LINE); + } + + m_sound_intck = state; +} + +/**********************************************************************************/ +/* port maps */ + +/* here we collect players' inputs: they are shared among all the ports */ +static INPUT_PORTS_START( common ) + PORT_START("SERVICE") + PORT_BIT( 0x01000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_SERVICE_NO_TOGGLE( 0x08000000, IP_ACTIVE_LOW ) + PORT_BIT( 0x10000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("INPUTS") + PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4) + PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4) + PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4) + PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4) + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) + PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) + PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) + PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_START4 ) + PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x00000800, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x00001000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) + PORT_BIT( 0x00002000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) + PORT_BIT( 0x00004000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3) + PORT_BIT( 0x00008000, IP_ACTIVE_LOW, IPT_START3 ) + + PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x00020000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x00040000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x00080000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x00100000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x00800000, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x01000000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08000000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x10000000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x20000000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x40000000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x80000000, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START("SYSTEM_DSW") + // d5a000 = DIP switches #1 (RDPORT1) + // d5a001 = DIP switches #2 + // d5a002 = input port: service4/3/2/1 coin 4/3/2/1 + // d5a003 = objint stat, exioint stat, trackint stat, excgint stat, escint stat, + // excpuint stat, objdma stat, eeprom do + + // note: racin' force expects bit 1 of the eeprom port to toggle + PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) + PORT_BIT( 0x000000fe, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, konamigx_state, gx_rdport1_3_r, nullptr) + PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00001000, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x00002000, IP_ACTIVE_LOW, IPT_SERVICE2 ) + PORT_BIT( 0x00004000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00008000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xffff0000, IP_ACTIVE_LOW, IPT_UNUSED ) /* DIP#1 & DIP#2 */ + + PORT_START( "EEPROMOUT" ) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) +INPUT_PORTS_END + + +static INPUT_PORTS_START( konamigx ) + PORT_INCLUDE( common ) + + PORT_MODIFY("SYSTEM_DSW") + PORT_DIPNAME( 0x00010000, 0x00010000, "Foo") + PORT_DIPSETTING( 0x00000000, "Foo") + PORT_DIPSETTING( 0x00010000, "Bar") + PORT_DIPNAME( 0x00020000, 0x00020000, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x00020000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x00040000, 0x00040000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00040000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x00080000, 0x00080000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00080000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x00100000, 0x00100000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00100000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x00200000, 0x00200000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00200000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x00400000, 0x00400000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00400000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x00800000, 0x00800000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00800000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x01000000, 0x00000000, DEF_STR( Stereo )) + PORT_DIPSETTING( 0x00000000, DEF_STR( Stereo )) + PORT_DIPSETTING( 0x01000000, DEF_STR( Mono )) + PORT_DIPNAME( 0x02000000, 0x02000000, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x02000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x04000000, 0x04000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x08000000, 0x08000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x10000000, 0x10000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x20000000, 0x20000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x40000000, 0x40000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x80000000, 0x80000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( racinfrc ) + /* racin force needs Player 2 Button 1 ("IN3" & 0x10) set to get past the calibration screen */ + PORT_INCLUDE( konamigx ) + + PORT_START("ADC-WRPORT") + PORT_BIT( 0x1000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("adc0834", adc083x_device, clk_write) + PORT_BIT( 0x2000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("adc0834", adc083x_device, di_write) + PORT_BIT( 0x4000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("adc0834", adc083x_device, cs_write) + + PORT_START("ADC-RDPORT") + PORT_BIT( 0x1000000, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("adc0834", adc083x_device, do_read) + + PORT_START("AN0") /* mask default type sens delta min max */ + PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x38,0xc8) PORT_SENSITIVITY(35) PORT_KEYDELTA(35) PORT_REVERSE + + PORT_START("AN1") + PORT_BIT( 0xff, 0xf0, IPT_PEDAL ) PORT_MINMAX(0x90,0xff) PORT_SENSITIVITY(35) PORT_KEYDELTA(35) PORT_CODE_INC(KEYCODE_LCONTROL) PORT_REVERSE +INPUT_PORTS_END + +static INPUT_PORTS_START( le2 ) + PORT_INCLUDE( common ) + + PORT_MODIFY("INPUTS") + PORT_BIT( 0x00100000, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* Unmapped P2 B1 for gun games */ + PORT_BIT( 0x10000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* Unmapped P1 B1 for gun games */ + + PORT_MODIFY("SERVICE") + PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) /* for gun games */ + PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) /* for gun games */ + PORT_BIT( 0x00000800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00001000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00002000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00004000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00008000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_MODIFY("SYSTEM_DSW") + PORT_BIT( 0x00ff0000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_DIPNAME( 0x01000000, 0x01000000, DEF_STR( Stereo )) + PORT_DIPSETTING( 0x01000000, DEF_STR( Stereo )) + PORT_DIPSETTING( 0x00000000, DEF_STR( Mono )) + PORT_DIPNAME( 0x02000000, 0x02000000, "Coin Mechanism") + PORT_DIPSETTING( 0x02000000, "Common") + PORT_DIPSETTING( 0x00000000, "Independent") + // TODO: inverted for le2j + PORT_DIPNAME( 0x04000000, 0x04000000, "Stage Select" ) + PORT_DIPSETTING( 0x04000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x08000000, 0x00000000, "Mirror" ) + PORT_DIPSETTING( 0x00000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x10000000, 0x10000000, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x10000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x20000000, 0x20000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x40000000, 0x40000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x80000000, 0x80000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + + PORT_START("LIGHT0_X") /* mask default type sens delta min max */ + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_PLAYER(1) + + PORT_START("LIGHT0_Y") + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_PLAYER(1) + + PORT_START("LIGHT1_X") + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_PLAYER(2) + + PORT_START("LIGHT1_Y") + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_PLAYER(2) +INPUT_PORTS_END + + +static INPUT_PORTS_START( le2_flip ) + PORT_INCLUDE( le2 ) + + PORT_MODIFY("LIGHT0_Y") + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_PLAYER(1) PORT_REVERSE + + PORT_MODIFY("LIGHT1_Y") + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_PLAYER(2) PORT_REVERSE +INPUT_PORTS_END + +static INPUT_PORTS_START( gokuparo ) + PORT_INCLUDE( common ) + + PORT_MODIFY("SYSTEM_DSW") + PORT_BIT( 0x00008000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_DIPNAME( 0x01000000, 0x00000000, DEF_STR( Stereo )) + PORT_DIPSETTING( 0x00000000, DEF_STR( Stereo )) + PORT_DIPSETTING( 0x01000000, DEF_STR( Mono )) + PORT_DIPNAME( 0x02000000, 0x02000000, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x02000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x04000000, 0x04000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x08000000, 0x08000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x10000000, 0x10000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x20000000, 0x20000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x40000000, 0x40000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x80000000, 0x80000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( puzldama ) + PORT_INCLUDE( common ) + + PORT_MODIFY("SYSTEM_DSW") + PORT_BIT( 0x00008000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_DIPNAME( 0x01000000, 0x00000000, DEF_STR( Stereo )) + PORT_DIPSETTING( 0x00000000, DEF_STR( Stereo )) + PORT_DIPSETTING( 0x01000000, DEF_STR( Mono )) + PORT_DIPNAME( 0x02000000, 0x02000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x02000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x04000000, 0x04000000, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x04000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x08000000, 0x08000000, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x08000000, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00000000, "Vs. cabinet" ) + PORT_DIPNAME( 0x10000000, 0x10000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x20000000, 0x20000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x40000000, 0x40000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x80000000, 0x80000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPSETTING( 0x02000000, DEF_STR( High ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( dragoonj ) + PORT_INCLUDE( common ) + + PORT_MODIFY("INPUTS") + PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) + PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) + PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) + PORT_BIT( 0x00000800, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00001000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) + PORT_BIT( 0x00002000, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) + PORT_BIT( 0x00004000, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) + PORT_BIT( 0x00008000, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_MODIFY("SYSTEM_DSW") + PORT_BIT( 0x00008000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_DIPNAME( 0x01000000, 0x00000000, DEF_STR( Stereo )) + PORT_DIPSETTING( 0x00000000, DEF_STR( Stereo )) + PORT_DIPSETTING( 0x01000000, DEF_STR( Mono )) + PORT_DIPNAME( 0x02000000, 0x02000000, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x02000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x04000000, 0x04000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x08000000, 0x08000000, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x08000000, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00000000, "Vs. cabinet" ) + PORT_DIPNAME( 0x10000000, 0x10000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x20000000, 0x20000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x40000000, 0x40000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x80000000, 0x80000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPSETTING( 0x02000000, DEF_STR( High ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( type3 ) + PORT_INCLUDE( common ) + + PORT_MODIFY("SYSTEM_DSW") + PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_COIN3 ) + PORT_BIT( 0x00000800, IP_ACTIVE_LOW, IPT_COIN4 ) + PORT_BIT( 0x00004000, IP_ACTIVE_LOW, IPT_SERVICE3 ) + PORT_BIT( 0x00008000, IP_ACTIVE_LOW, IPT_SERVICE4 ) + PORT_DIPNAME( 0x01000000, 0x00000000, DEF_STR( Stereo )) + PORT_DIPSETTING( 0x00000000, DEF_STR( Stereo )) + PORT_DIPSETTING( 0x01000000, DEF_STR( Mono )) + PORT_DIPNAME( 0x02000000, 0x02000000, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x02000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x04000000, 0x04000000, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x04000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x08000000, 0x08000000, "Screens" ) + PORT_DIPSETTING( 0x08000000, "1" ) + PORT_DIPSETTING( 0x00000000, "2" ) + PORT_DIPNAME( 0x10000000, 0x10000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x20000000, 0x20000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x40000000, 0x40000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPNAME( 0x80000000, 0x80000000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80000000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) + PORT_DIPSETTING( 0x02000000, DEF_STR( High ) ) +INPUT_PORTS_END + + +/**********************************************************************************/ +/* hardware definitions */ + +/* i think we could reduce the number of machine drivers with different visible areas by adjusting the sprite + positioning on a per game basis too */ + +static const gfx_layout bglayout_8bpp = +{ + 16,16, + RGN_FRAC(1,1), + 8, + { 0, 1, 2, 3, 4, 5, 6, 7 }, + { 0*128, 1*128, 2*128, 3*128, 4*128, 5*128, 6*128, 7*128, 8*128, 9*128, 10*128, 11*128, 12*128, 13*128, 14*128, 15*128 }, + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 }, + 16*128 +}; + +// for scanrows on tilemap +#if 0 +static const gfx_layout t1_charlayout6 = +{ + 16, 16, + RGN_FRAC(1,1), + 6, + { 20, 16, 12, 8, 4, 0 }, + { 3, 2, 1, 0, 27, 26, 25, 24, 51, 50, 49, 48, 75, 74, 73, 72 }, + { 0, 12*8, 12*8*2, 12*8*3, 12*8*4, 12*8*5, 12*8*6, 12*8*7, + 12*8*8, 12*8*9, 12*8*10, 12*8*11, 12*8*12, 12*8*13, 12*8*14, 12*8*15 }, + 16*16*6 +}; + +static const gfx_layout t1_charlayout8 = +{ + 16, 16, + RGN_FRAC(1,1), + 8, + { 28, 24, 20, 16, 12, 8, 4, 0 }, + { 3, 2, 1, 0, 35, 34, 33, 32, 67, 66, 65, 64, 99, 98, 97, 96 }, + { 0, 16*8, 16*8*2, 16*8*3, 16*8*4, 16*8*5, 16*8*6, 16*8*7, + 16*8*8, 16*8*9, 16*8*10, 16*8*11, 16*8*12, 16*8*13, 16*8*14, 16*8*15 }, + 16*16*8 +}; +#endif + +// for scancols on tilemap +static const gfx_layout t1_charlayout6 = +{ + 16, 16, + RGN_FRAC(1,1), + 6, + { 20, 16, 12, 8, 4, 0 }, + { 0, 12*8, 12*8*2, 12*8*3, 12*8*4, 12*8*5, 12*8*6, 12*8*7, + 12*8*8, 12*8*9, 12*8*10, 12*8*11, 12*8*12, 12*8*13, 12*8*14, 12*8*15 }, + { 3, 2, 1, 0, 27, 26, 25, 24, 51, 50, 49, 48, 75, 74, 73, 72 }, + 16*16*6 +}; + +static const gfx_layout t1_charlayout8 = +{ + 16, 16, + RGN_FRAC(1,1), + 8, + { 28, 24, 20, 16, 12, 8, 4, 0 }, + { 0, 16*8, 16*8*2, 16*8*3, 16*8*4, 16*8*5, 16*8*6, 16*8*7, + 16*8*8, 16*8*9, 16*8*10, 16*8*11, 16*8*12, 16*8*13, 16*8*14, 16*8*15 }, + { 3, 2, 1, 0, 35, 34, 33, 32, 67, 66, 65, 64, 99, 98, 97, 96 }, + 16*16*8 +}; + +/* type 1 (opengolf + racinfrc) use 6 and 8 bpp planar layouts for the 53936 */ +static GFXDECODE_START( gfx_opengolf ) + GFXDECODE_ENTRY( "gfx3", 0, t1_charlayout8, 0x0000, 8 ) + GFXDECODE_ENTRY( "gfx4", 0, t1_charlayout6, 0x0000, 8 ) +GFXDECODE_END + +static GFXDECODE_START( gfx_racinfrc ) + GFXDECODE_ENTRY( "gfx3", 0, t1_charlayout6, 0x0000, 8 ) + GFXDECODE_ENTRY( "gfx4", 0, t1_charlayout6, 0x0000, 8 ) +GFXDECODE_END + +/* type 3 & 4 games use a simple 8bpp decode for the 53936 */ +static GFXDECODE_START( gfx_type3 ) + GFXDECODE_ENTRY( "gfx3", 0, bglayout_8bpp, 0x1000, 8 ) +GFXDECODE_END + +static GFXDECODE_START( gfx_type4 ) + GFXDECODE_ENTRY( "gfx3", 0, bglayout_8bpp, 0x1800, 8 ) +GFXDECODE_END + +WRITE_LINE_MEMBER(konamigx_state::vblank_irq_ack_w) +{ + m_maincpu->set_input_line(1, CLEAR_LINE); + m_gx_syncen |= 0x20; +} + +WRITE_LINE_MEMBER(konamigx_state::hblank_irq_ack_w) +{ + m_maincpu->set_input_line(2, CLEAR_LINE); + m_gx_syncen |= 0x40; +} + +void konamigx_state::konamigx(machine_config &config) +{ + /* basic machine hardware */ + M68EC020(config, m_maincpu, MASTER_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &konamigx_state::gx_type2_map); + m_maincpu->set_vblank_int("screen", FUNC(konamigx_state::konamigx_type2_vblank_irq)); + + M68000(config, m_soundcpu, SUB_CLOCK/2); + m_soundcpu->set_addrmap(AS_PROGRAM, &konamigx_state::gxsndmap); + + TMS57002(config, m_dasp, MASTER_CLOCK/2); + m_dasp->set_addrmap(AS_DATA, &konamigx_state::gxtmsmap); + + K053252(config, m_k053252, MASTER_CLOCK/4); + m_k053252->set_offsets(24, 16); + m_k053252->int1_ack().set(FUNC(konamigx_state::vblank_irq_ack_w)); + m_k053252->int2_ack().set(FUNC(konamigx_state::hblank_irq_ack_w)); + m_k053252->set_screen("screen"); + + config.m_minimum_quantum = attotime::from_hz(6000); + + MCFG_MACHINE_START_OVERRIDE(konamigx_state,konamigx) + MCFG_MACHINE_RESET_OVERRIDE(konamigx_state,konamigx) + + EEPROM_93C46_16BIT(config, "eeprom"); + + /* video hardware */ + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK); + m_screen->set_raw(8000000, 384+24+64+40, 0, 383, 224+16+8+16, 0, 223); + /* These parameters are actual value written to the CCU. + tbyahhoo attract mode desync is caused by another matter. */ + + //MCFG_SCREEN_vblank_time(ATTOSECONDS_IN_USEC(600)) + // TODO: WTF, without these most games crashes? Some legacy call in video code??? + m_screen->set_size(1024, 1024); + m_screen->set_visarea(24, 24+288-1, 16, 16+224-1); + m_screen->set_screen_update(FUNC(konamigx_state::screen_update_konamigx)); + + PALETTE(config, m_palette).set_format(palette_device::xRGB_888, 8192); + m_palette->enable_shadows(); + m_palette->enable_hilights(); + + K056832(config, m_k056832, 0); + m_k056832->set_tile_callback(FUNC(konamigx_state::type2_tile_callback), this); + m_k056832->set_config(K056832_BPP_5, 0, 0); + m_k056832->set_palette(m_palette); + + K055555(config, m_k055555, 0); + + K054338(config, m_k054338, 0, m_k055555); + m_k054338->set_screen(m_screen); + m_k054338->set_alpha_invert(1); + + K055673(config, m_k055673, 0); + m_k055673->set_sprite_callback(FUNC(konamigx_state::type2_sprite_callback), this); + m_k055673->set_config(K055673_LAYOUT_GX, -26, -23); + m_k055673->set_screen(m_screen); + m_k055673->set_palette(m_palette); + + MCFG_VIDEO_START_OVERRIDE(konamigx_state, konamigx_5bpp) + + /* sound hardware */ + SPEAKER(config, "lspeaker").front_left(); + SPEAKER(config, "rspeaker").front_right(); + + m_dasp->add_route(0, "lspeaker", 0.3); // Connected to the aux input of respective 54539. + m_dasp->add_route(1, "rspeaker", 0.3); + m_dasp->add_route(2, "lspeaker", 0.3); + m_dasp->add_route(3, "rspeaker", 0.3); + + K056800(config, m_k056800, XTAL(18'432'000)); + m_k056800->int_callback().set_inputline(m_soundcpu, M68K_IRQ_1); + + K054539(config, m_k054539_1, XTAL(18'432'000)); + m_k054539_1->set_device_rom_tag("k054539"); + m_k054539_1->timer_handler().set(FUNC(konamigx_state::k054539_irq_gen)); + m_k054539_1->add_route(0, "dasp", 0.5, 0); + m_k054539_1->add_route(1, "dasp", 0.5, 1); + m_k054539_1->add_route(0, "lspeaker", 1.0); + m_k054539_1->add_route(1, "rspeaker", 1.0); + + K054539(config, m_k054539_2, XTAL(18'432'000)); + m_k054539_2->set_device_rom_tag("k054539"); + m_k054539_2->add_route(0, "dasp", 0.5, 2); + m_k054539_2->add_route(1, "dasp", 0.5, 3); + m_k054539_2->add_route(0, "lspeaker", 1.0); + m_k054539_2->add_route(1, "rspeaker", 1.0); +} + +void konamigx_state::konamigx_bios(machine_config &config) +{ + konamigx(config); + + m_k056832->set_config(K056832_BPP_4, 0, 0); +} + +void konamigx_state::gokuparo(machine_config &config) +{ + konamigx(config); + m_k055673->set_config(K055673_LAYOUT_GX, -46, -23); +} + +void konamigx_state::sexyparo(machine_config &config) +{ + konamigx(config); + + m_k056832->set_tile_callback(FUNC(konamigx_state::alpha_tile_callback), this); + + m_k055673->set_config(K055673_LAYOUT_GX, -42, -23); +} + +void konamigx_state::tbyahhoo(machine_config &config) +{ + konamigx(config); + + m_k056832->set_config(K056832_BPP_5, 0, 0); +} + +void konamigx_state::dragoonj(machine_config &config) +{ + konamigx(config); + MCFG_VIDEO_START_OVERRIDE(konamigx_state, dragoonj) + + m_k053252->set_offsets(24+16, 16); + + m_k056832->set_config(K056832_BPP_5, 1, 0); + + m_k055673->set_sprite_callback(FUNC(konamigx_state::dragoonj_sprite_callback), this); + m_k055673->set_config(K055673_LAYOUT_RNG, -53, -23); +} + +void konamigx_state::le2(machine_config &config) +{ + konamigx(config); + MCFG_VIDEO_START_OVERRIDE(konamigx_state, le2) + + TIMER(config, "scantimer").configure_scanline(FUNC(konamigx_state::konamigx_type2_scanline), "screen", 0, 1); + + m_k056832->set_config(K056832_BPP_8, 1, 0); + + m_k055673->set_sprite_callback(FUNC(konamigx_state::le2_sprite_callback), this); + m_k055673->set_config(K055673_LAYOUT_LE2, -46, -23); +} + +void konamigx_state::konamigx_6bpp(machine_config &config) +{ + konamigx(config); + MCFG_VIDEO_START_OVERRIDE(konamigx_state, konamigx_6bpp) + + m_k056832->set_config(K056832_BPP_6, 0, 0); + + m_k055673->set_config(K055673_LAYOUT_GX, -46, -23); +} + +void konamigx_state::salmndr2(machine_config &config) +{ + konamigx(config); + m_k056832->set_config(K056832_BPP_6, 1, 0); + + m_k055673->set_sprite_callback(FUNC(konamigx_state::salmndr2_sprite_callback), this); + m_k055673->set_config(K055673_LAYOUT_GX6, -48, -23); +} + +void konamigx_state::opengolf(machine_config &config) +{ + konamigx(config); + + m_screen->set_raw(8000000, 384+24+64+40, 0, 383, 224+16+8+16, 0, 223); + m_screen->set_visarea(40, 40+384-1, 16, 16+224-1); + + GFXDECODE(config, m_gfxdecode, m_palette, gfx_opengolf); + + MCFG_VIDEO_START_OVERRIDE(konamigx_state, opengolf) + + m_k055673->set_config(K055673_LAYOUT_GX6, -53, -23); + + m_maincpu->set_addrmap(AS_PROGRAM, &konamigx_state::gx_type1_map); + + adc0834_device &adc(ADC0834(config, "adc0834")); + adc.set_input_callback(FUNC(konamigx_state::adc0834_callback)); +} + +void konamigx_state::racinfrc(machine_config &config) +{ + konamigx(config); + //m_screen->set_raw(6000000, 384+24+64+40, 0, 383, 224+16+8+16, 0, 223); + //m_screen->set_visarea(32, 32+384-1, 16, 16+224-1); + + GFXDECODE(config, m_gfxdecode, m_palette, gfx_racinfrc); + + MCFG_VIDEO_START_OVERRIDE(konamigx_state, racinfrc) + + m_k053252->set_offsets(24-8+16, 0); + + m_k056832->set_config(K056832_BPP_6, 0, 0); + + m_k055673->set_config(K055673_LAYOUT_GX, -53, -23); + + m_maincpu->set_addrmap(AS_PROGRAM, &konamigx_state::gx_type1_map); + + adc0834_device &adc(ADC0834(config, "adc0834", 0)); + adc.set_input_callback(FUNC(konamigx_state::adc0834_callback)); +} + +void konamigx_state::gxtype3(machine_config &config) +{ + konamigx(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &konamigx_state::gx_type3_map); + TIMER(config, "scantimer").configure_scanline(FUNC(konamigx_state::konamigx_type4_scanline), "screen", 0, 1); + + config.set_default_layout(layout_dualhsxs); + + GFXDECODE(config, m_gfxdecode, m_palette, gfx_type3); + + MCFG_VIDEO_START_OVERRIDE(konamigx_state, konamigx_type3) + + m_k053252->set_offsets(0, 16); + m_k053252->set_slave_screen("screen2"); + + m_k056832->set_config(K056832_BPP_6, 0, 2); + + m_k055673->set_config(K055673_LAYOUT_GX6, -132, -23); + + PALETTE(config.replace(), m_palette).set_entries(16384); + m_palette->enable_shadows(); + m_palette->enable_hilights(); + + m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK | VIDEO_ALWAYS_UPDATE); + m_screen->set_size(1024, 1024); + m_screen->set_visarea(0, 576-1, 16, 32*8-1-16); + m_screen->set_screen_update(FUNC(konamigx_state::screen_update_konamigx_left)); + + screen_device &screen2(SCREEN(config, "screen2", SCREEN_TYPE_RASTER)); + screen2.set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK | VIDEO_ALWAYS_UPDATE); + screen2.set_raw(6000000, 288+16+32+48, 0, 287, 224+16+8+16, 0, 223); + screen2.set_size(1024, 1024); + screen2.set_visarea(0, 576-1, 16, 32*8-1-16); + screen2.set_screen_update(FUNC(konamigx_state::screen_update_konamigx_right)); +} + +void konamigx_state::gxtype4(machine_config &config) +{ + konamigx(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &konamigx_state::gx_type4_map); + TIMER(config, "scantimer").configure_scanline(FUNC(konamigx_state::konamigx_type4_scanline), "screen", 0, 1); + + config.set_default_layout(layout_dualhsxs); + + m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK | VIDEO_ALWAYS_UPDATE); + //m_screen->set_size(128*8, 264); + //m_screen->set_visarea(0, 384-1, 16, 32*8-1-16); + m_screen->set_screen_update(FUNC(konamigx_state::screen_update_konamigx_left)); + + screen_device &screen2(SCREEN(config, "screen2", SCREEN_TYPE_RASTER)); + screen2.set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK | VIDEO_ALWAYS_UPDATE); + screen2.set_raw(6000000, 288+16+32+48, 0, 287, 224+16+8+16, 0, 223); + screen2.set_size(1024, 1024); + screen2.set_visarea(0, 384-1, 16, 32*8-1-16); + screen2.set_screen_update(FUNC(konamigx_state::screen_update_konamigx_right)); + + PALETTE(config.replace(), m_palette).set_entries(8192); + m_palette->enable_shadows(); + m_palette->enable_hilights(); + + GFXDECODE(config, m_gfxdecode, m_palette, gfx_type4); + MCFG_VIDEO_START_OVERRIDE(konamigx_state, konamigx_type4) + + m_k053252->set_offsets(0, 16); + m_k053252->set_slave_screen("screen2"); + + m_k056832->set_config(K056832_BPP_8, 0, 0); + + m_k055673->set_config(K055673_LAYOUT_GX6, -79, -24); // -23 looks better in intro +} + +void konamigx_state::gxtype4_vsn(machine_config &config) +{ + gxtype4(config); + config.set_default_layout(layout_dualhsxs); + + //m_screen->set_size(128*8, 32*8); + //m_screen->set_visarea(0, 576-1, 16, 32*8-1-16); + + m_k053252->set_offsets(0, 16); + + subdevice<screen_device>("screen2")->set_size(1024, 1024); + subdevice<screen_device>("screen2")->set_visarea(0, 576-1, 16, 32*8-1-16); + + MCFG_VIDEO_START_OVERRIDE(konamigx_state, konamigx_type4_vsn) + + m_k056832->set_config(K056832_BPP_8, 0, 2); // set djmain_hack to 2 to kill layer association or half the tilemaps vanish on screen 0 + + m_k055673->set_config(K055673_LAYOUT_GX6, -132, -23); +} + +void konamigx_state::gxtype4sd2(machine_config &config) +{ + gxtype4(config); + MCFG_VIDEO_START_OVERRIDE(konamigx_state, konamigx_type4_sd2) + + m_k055673->set_config(K055673_LAYOUT_GX6, -81, -23); +} + +void konamigx_state::winspike(machine_config &config) +{ + konamigx(config); + //m_screen->set_visible_area(38, 38+384-1, 16, 16+224-1); + + m_k053252->set_offsets(24+15, 16); + + m_k056832->set_tile_callback(FUNC(konamigx_state::alpha_tile_callback), this); + m_k056832->set_config(K056832_BPP_8, 0, 2); + + m_k055673->set_config(K055673_LAYOUT_LE2, -53, -23); +} + + +/**********************************************************************************/ +/* BIOS and ROM maps */ + +#define GX_BIOS ROM_LOAD("300a01.34k", 0x000000, 128*1024, CRC(d5fa95f5) SHA1(c483aa98ff8ef40cdac359c19ad23fea5ecc1906) ) + +ROM_START(konamigx) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF ) + GX_BIOS + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", ROMREGION_ERASE00 ) + // TODO: Bus Error, I guess? + //ROM_FILL( 4, 1, 0x00 ) + //ROM_FILL( 5, 1, 0x00 ) + ROM_FILL( 6, 1, 0x01 ) + //ROM_FILL( 7, 1, 0x00 ) + ROM_FILL( 0x100, 1, 0x60 ) + ROM_FILL( 0x101, 1, 0xfe ) + + /* tiles */ + ROM_REGION( 0x600000, "k056832", ROMREGION_ERASEFF ) + /* sprites */ + ROM_REGION( 0x500000, "k055673", ROMREGION_ERASEFF ) + /* sound samples */ + ROM_REGION( 0x400000, "k054539", ROMREGION_ERASE00 ) +ROM_END + +#define SPR_WOR_DROM_LOAD(name,offset,length,crc) ROMX_LOAD(name, offset, length, crc, ROM_GROUPWORD | ROM_SKIP(5)) +#define SPR_5TH_ROM_LOAD(name,offset,length,crc) ROMX_LOAD(name, offset, length, crc, ROM_GROUPBYTE | ROM_SKIP(5)) + +#define TILE_WORD_ROM_LOAD(name,offset,length,crc) ROMX_LOAD(name, offset, length, crc, ROM_GROUPDWORD | ROM_SKIP(1)) +#define TILE_BYTE_ROM_LOAD(name,offset,length,crc) ROMX_LOAD(name, offset, length, crc, ROM_GROUPBYTE | ROM_SKIP(4)) + +#define TILE_WORDS2_ROM_LOAD(name,offset,length,crc) ROMX_LOAD(name, offset, length, crc, ROM_GROUPDWORD | ROM_SKIP(2)) +#define TILE_BYTES2_ROM_LOAD(name,offset,length,crc) ROMX_LOAD(name, offset, length, crc, ROM_GROUPWORD | ROM_SKIP(4)) + +#define T1_PSAC6_ROM_LOAD(name,offset,length,crc) ROMX_LOAD(name, offset, length, crc, ROM_GROUPBYTE | ROM_SKIP(2)) +#define T1_PSAC8_ROM_LOAD(name,offset,length,crc) ROMX_LOAD(name, offset, length, crc, ROM_GROUPBYTE | ROM_SKIP(3)) + +#define _48_WORD_ROM_LOAD(name,offset,length,crc) ROMX_LOAD(name, offset, length, crc, ROM_GROUPWORD | ROM_SKIP(4)) + + +/* Gokujou Parodius version JAD (Japan) */ +ROM_START( gokuparo ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "321jad02.21b", 0x200002, 512*1024, CRC(c2e548c0) SHA1(48fbcc96d1f56bb3abb5098400536a18a676d934) ) + ROM_LOAD32_WORD_SWAP( "321jad04.27b", 0x200000, 512*1024, CRC(916a7951) SHA1(d6f56ff5f6c6708939767e69a3ebc7c7eddb6003) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("321b06.9c", 0x000000, 128*1024, CRC(da810554) SHA1(f253e1aa137eecf283d8b083ef2b3b049e8366f4) ) + ROM_LOAD16_BYTE("321b07.7c", 0x000001, 128*1024, CRC(c47634c0) SHA1(20e4105df5bbc33edd01894e78f74ed5f173576e) ) + + /* tiles */ + ROM_REGION( 0x600000, "k056832", ROMREGION_ERASE00 ) + TILE_WORD_ROM_LOAD( "321b14.17h", 0x000000, 2*1024*1024, CRC(437d0057) SHA1(30c449200e0510dc664289b527bade6e10dbe57a) ) + TILE_BYTE_ROM_LOAD( "321b12.13g", 0x000004, 512*1024, CRC(5f9edfa0) SHA1(36d54c5fe498a4d0fa64757cef11c56c67518258) ) + + /* sprites */ + ROM_REGION( 0x500000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD32_WORD( "321b11.25g", 0x000000, 2*1024*1024, CRC(c6e2e74d) SHA1(3875a50923e46e2986dbe2573453af5c7fa726f7) ) + ROM_LOAD32_WORD( "321b10.28g", 0x000002, 2*1024*1024, CRC(ea9f8c48) SHA1(b5e880015887308a5f1c1c623011d9b0903e848f) ) + ROM_LOAD( "321b09.30g", 0x400000, 1*1024*1024, CRC(94add237) SHA1(9a6d0a9727e7fa02d91ece220b145074a6741a95) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "321b17.9g", 0x000000, 2*1024*1024, CRC(b3e8d5d8) SHA1(6644a414e7f0e69ded9aa1bf892566002cebae26) ) + ROM_LOAD( "321b18.7g", 0x200000, 2*1024*1024, CRC(2c561ad0) SHA1(6265054072ba1c2837dd96e0259b20bc50457160) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "gokuparo.nv", 0x0000, 0x080, CRC(15c0f2d9) SHA1(57c7462e3b1e15652ec5d682a1be3786926ddecd) ) +ROM_END + +/* Fantastic Journey version EAA (Euro) */ +ROM_START( fantjour ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "321eaa02.21b", 0x200002, 512*1024, CRC(afaf9d17) SHA1(a12214c6e634862d6507f56719b55d4a23a0ef0f) ) + ROM_LOAD32_WORD_SWAP( "321eaa04.27b", 0x200000, 512*1024, CRC(b2cfe225) SHA1(7fd43acb1dd853a7980e7fcf48971ae28175e421) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("321b06.9c", 0x000000, 128*1024, CRC(da810554) SHA1(f253e1aa137eecf283d8b083ef2b3b049e8366f4) ) + ROM_LOAD16_BYTE("321b07.7c", 0x000001, 128*1024, CRC(c47634c0) SHA1(20e4105df5bbc33edd01894e78f74ed5f173576e) ) + + /* tiles */ + ROM_REGION( 0x600000, "k056832", ROMREGION_ERASE00 ) + TILE_WORD_ROM_LOAD( "321b14.17h", 0x000000, 2*1024*1024, CRC(437d0057) SHA1(30c449200e0510dc664289b527bade6e10dbe57a) ) + TILE_BYTE_ROM_LOAD( "321b12.13g", 0x000004, 512*1024, CRC(5f9edfa0) SHA1(36d54c5fe498a4d0fa64757cef11c56c67518258) ) + + /* sprites */ + ROM_REGION( 0x500000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD32_WORD( "321b11.25g", 0x000000, 2*1024*1024, CRC(c6e2e74d) SHA1(3875a50923e46e2986dbe2573453af5c7fa726f7) ) + ROM_LOAD32_WORD( "321b10.28g", 0x000002, 2*1024*1024, CRC(ea9f8c48) SHA1(b5e880015887308a5f1c1c623011d9b0903e848f) ) + ROM_LOAD( "321b09.30g", 0x400000, 1*1024*1024, CRC(94add237) SHA1(9a6d0a9727e7fa02d91ece220b145074a6741a95) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "321b17.9g", 0x000000, 2*1024*1024, CRC(b3e8d5d8) SHA1(6644a414e7f0e69ded9aa1bf892566002cebae26) ) + ROM_LOAD( "321b18.7g", 0x200000, 2*1024*1024, CRC(2c561ad0) SHA1(6265054072ba1c2837dd96e0259b20bc50457160) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "fantjour.nv", 0x0000, 0x080, CRC(35b7d8e1) SHA1(5f0e3799ff9c63af3e55b040cc52b2a9e7a76168) ) +ROM_END + +/* Fantastic Journey version AAA (Asia) */ +ROM_START( fantjoura ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "321aaa02.21b", 0x200002, 512*1024, CRC(5efb62f8) SHA1(637ea9809bd49c865f6d565d2707ddb110f9bea2) ) + ROM_LOAD32_WORD_SWAP( "321aaa04.27b", 0x200000, 512*1024, CRC(507becce) SHA1(feaced6562569679ea3813546cbcb8fa40709dd5) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("321b06.9c", 0x000000, 128*1024, CRC(da810554) SHA1(f253e1aa137eecf283d8b083ef2b3b049e8366f4) ) + ROM_LOAD16_BYTE("321b07.7c", 0x000001, 128*1024, CRC(c47634c0) SHA1(20e4105df5bbc33edd01894e78f74ed5f173576e) ) + + /* tiles */ + ROM_REGION( 0x600000, "k056832", ROMREGION_ERASE00 ) + TILE_WORD_ROM_LOAD( "321b14.17h", 0x000000, 2*1024*1024, CRC(437d0057) SHA1(30c449200e0510dc664289b527bade6e10dbe57a) ) + TILE_BYTE_ROM_LOAD( "321b12.13g", 0x000004, 512*1024, CRC(5f9edfa0) SHA1(36d54c5fe498a4d0fa64757cef11c56c67518258) ) + + /* sprites */ + ROM_REGION( 0x500000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD32_WORD( "321b11.25g", 0x000000, 2*1024*1024, CRC(c6e2e74d) SHA1(3875a50923e46e2986dbe2573453af5c7fa726f7) ) + ROM_LOAD32_WORD( "321b10.28g", 0x000002, 2*1024*1024, CRC(ea9f8c48) SHA1(b5e880015887308a5f1c1c623011d9b0903e848f) ) + ROM_LOAD( "321b09.30g", 0x400000, 1*1024*1024, CRC(94add237) SHA1(9a6d0a9727e7fa02d91ece220b145074a6741a95) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "321b17.9g", 0x000000, 2*1024*1024, CRC(b3e8d5d8) SHA1(6644a414e7f0e69ded9aa1bf892566002cebae26) ) + ROM_LOAD( "321b18.7g", 0x200000, 2*1024*1024, CRC(2c561ad0) SHA1(6265054072ba1c2837dd96e0259b20bc50457160) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "fantjoura.nv", 0x0000, 0x080, CRC(d13b1ec1) SHA1(0f4aedd0aa9682b0b68b9f7745946a3bc1e76714) ) +ROM_END + +/* Salamander 2 version JAA (Japan) */ +ROM_START( salmndr2 ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "521jaa02.31b", 0x200002, 512*1024, CRC(f6c3a95b) SHA1(c4ef3631eca898e5787fb2d356355da7e5d475eb) ) + ROM_LOAD32_WORD_SWAP( "521jaa03.27b", 0x200000, 512*1024, CRC(c3be5e0a) SHA1(13bbce62c4d04a657de4594cc4d258e2468a59a4) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("521-a04.9c", 0x000000, 64*1024, CRC(efddca7a) SHA1(ac6b45044b6abeb2455ec21a61322185bf1c7219) ) + ROM_LOAD16_BYTE("521-a05.7c", 0x000001, 64*1024, CRC(51a3af2c) SHA1(94d220ae619d53747bd3e762000ed59cf1b4d305) ) + + /* tiles */ + ROM_REGION( 0x800000, "k056832", ROMREGION_ERASE00 ) + TILE_WORDS2_ROM_LOAD("521-a09.17h", 0x000000, 2*1024*1024, CRC(fb9e2f5e) SHA1(acb41616625d6976ad50e184787ab74e29f86039) ) + TILE_WORDS2_ROM_LOAD("521-a11.15h", 0x300000, 1*1024*1024, CRC(25e0a6e5) SHA1(592e9f183f077e9272a4f0ead441b5bfd8029816) ) + TILE_BYTES2_ROM_LOAD("521-a13.13c", 0x000004, 2*1024*1024, CRC(3ed7441b) SHA1(57e3e8035c056cf46a383d228c76a7da7def134f) ) + + /* sprites */ + ROM_REGION( 0x600000, "k055673", ROMREGION_ERASE00 ) + _48_WORD_ROM_LOAD( "521-a08.25g", 0x000000, 2*1024*1024, CRC(f24f76bd) SHA1(823f614d436901241743c923206cb61d8bbb5c58) ) + _48_WORD_ROM_LOAD( "521-a07.28g", 0x000002, 2*1024*1024, CRC(50ef9b7a) SHA1(104eac2bce43e99d4adc208145afe7be9156628e) ) + _48_WORD_ROM_LOAD( "521-a06.30g", 0x000004, 2*1024*1024, CRC(cba5db2c) SHA1(505efdf8571ae28d8788dcafbfffcfb67e3189ce) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "521-a12.9g", 0x000000, 2*1024*1024, CRC(66614d3b) SHA1(e1e5ebe546bced6ab74b0af500acf0f3308902a4) ) + ROM_LOAD( "521-a13.7g", 0x200000, 1*1024*1024, CRC(c3322475) SHA1(1774524ff031e0c4a7f3432810e968d37f9c6331) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "salmndr2.nv", 0x0000, 0x080, CRC(60cdea03) SHA1(6aa597d391b5d7db67e599ec54d98600983966fc) ) +ROM_END + +/* Salamander 2 version AAB (Asia) */ +ROM_START( salmndr2a ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "521aab02.31b", 0x200002, 512*1024, CRC(ac9d151f) SHA1(aabd17a41a42cbbe9b62a9751cdb264e714cac6a) ) + ROM_LOAD32_WORD_SWAP( "521aab03.27b", 0x200000, 512*1024, CRC(feecf34d) SHA1(c37959199afedd3deee9d4c248ec83ccccf9a401) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("521-a04.9c", 0x000000, 64*1024, CRC(efddca7a) SHA1(ac6b45044b6abeb2455ec21a61322185bf1c7219) ) + ROM_LOAD16_BYTE("521-a05.7c", 0x000001, 64*1024, CRC(51a3af2c) SHA1(94d220ae619d53747bd3e762000ed59cf1b4d305) ) + + /* tiles */ + ROM_REGION( 0x800000, "k056832", ROMREGION_ERASE00 ) + TILE_WORDS2_ROM_LOAD("521-a09.17h", 0x000000, 2*1024*1024, CRC(fb9e2f5e) SHA1(acb41616625d6976ad50e184787ab74e29f86039) ) + TILE_WORDS2_ROM_LOAD("521-a11.15h", 0x300000, 1*1024*1024, CRC(25e0a6e5) SHA1(592e9f183f077e9272a4f0ead441b5bfd8029816) ) + TILE_BYTES2_ROM_LOAD("521-a13.13c", 0x000004, 2*1024*1024, CRC(3ed7441b) SHA1(57e3e8035c056cf46a383d228c76a7da7def134f) ) + + /* sprites */ + ROM_REGION( 0x600000, "k055673", ROMREGION_ERASE00 ) + _48_WORD_ROM_LOAD( "521-a08.25g", 0x000000, 2*1024*1024, CRC(f24f76bd) SHA1(823f614d436901241743c923206cb61d8bbb5c58) ) + _48_WORD_ROM_LOAD( "521-a07.28g", 0x000002, 2*1024*1024, CRC(50ef9b7a) SHA1(104eac2bce43e99d4adc208145afe7be9156628e) ) + _48_WORD_ROM_LOAD( "521-a06.30g", 0x000004, 2*1024*1024, CRC(cba5db2c) SHA1(505efdf8571ae28d8788dcafbfffcfb67e3189ce) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "521-a12.9g", 0x000000, 2*1024*1024, CRC(66614d3b) SHA1(e1e5ebe546bced6ab74b0af500acf0f3308902a4) ) + ROM_LOAD( "521-a13.7g", 0x200000, 1*1024*1024, CRC(c3322475) SHA1(1774524ff031e0c4a7f3432810e968d37f9c6331) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "salmndr2a.nv", 0x0000, 0x080, CRC(3a98a8f9) SHA1(08c2d164620a4d8ad902d502acea8ad621931198) ) +ROM_END + +/* Twinbee Yahhoo! */ +ROM_START( tbyahhoo ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "424jaa02.31b", 0x200002, 512*1024, CRC(0416ad78) SHA1(a94c37a95e431c8f8cc3db66713faed406ab27c4) ) + ROM_LOAD32_WORD_SWAP( "424jaa04.27b", 0x200000, 512*1024, CRC(bcbe0e40) SHA1(715f72a172a0662e6e65a57baa1f5a18d6210389) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("424a06.9c", 0x000000, 128*1024, CRC(a4760e14) SHA1(78dbd309f3f7fa61e92c9554e594449a7d4eed5a) ) + ROM_LOAD16_BYTE("424a07.7c", 0x000001, 128*1024, CRC(fa90d7e2) SHA1(6b6dee29643309005834416bdfdb18d74f34cb1b) ) + + /* tiles */ + ROM_REGION( 0x500000, "k056832", ROMREGION_ERASE00 ) + TILE_WORD_ROM_LOAD( "424a14.17h", 0x000000, 2*1024*1024, CRC(b1d9fce8) SHA1(143ed2f03ac10a0f18d878c0ee0509a5714e4664) ) + TILE_BYTE_ROM_LOAD( "424a12.13g", 0x000004, 512*1024, CRC(7f9cb8b1) SHA1(f5e18d70fcb572bb85f9b064995fc0ab0bb581e8) ) + + /* sprites */ + ROM_REGION( 0x500000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD32_WORD( "424a11.25g", 0x000000, 2*1024*1024, CRC(29592688) SHA1(a4b44e9153988a510915af83116e3c18dd15642f) ) + ROM_LOAD32_WORD( "424a10.28g", 0x000002, 2*1024*1024, CRC(cf24e5e3) SHA1(095bf2ae4f47c6e4768515ae5e22c982fbc660a5) ) + ROM_LOAD( "424a09.30g", 0x400000, 1*1024*1024, CRC(daa07224) SHA1(198cafa3d0ead2aa2593be066c6f372e66c11c44) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "424a17.9g", 0x000000, 2*1024*1024, CRC(e9dd9692) SHA1(c289019c8d1dd71b3cec26479c39b649de804707) ) + ROM_LOAD( "424a18.7g", 0x200000, 2*1024*1024, CRC(0f0d9f3a) SHA1(57f6b113b80f06964b7e672ad517c1654c5569c5) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "tbyahhoo.nv", 0x0000, 0x080, CRC(1e6fa2f8) SHA1(fceb6617a4e02babfc1678bae9f6a131c1d759f5) ) +ROM_END + +/* Daisu-Kiss */ +ROM_START( daiskiss ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "535jaa02.31b", 0x200002, 512*1024, CRC(e5b3e0e5) SHA1(94910d79299e99022a1759998304b87440694ca0) ) + ROM_LOAD32_WORD_SWAP( "535jaa03.27b", 0x200000, 512*1024, CRC(9dc10140) SHA1(0c4cc20b2c8ff5080fbd4ceb9446e6940b12cc53) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("535a08.9c", 0x000000, 128*1024, CRC(449416a7) SHA1(c79bf0d68c8639f67eb17f24f1bc10dd867a4c37) ) + ROM_LOAD16_BYTE("535a09.7c", 0x000001, 128*1024, CRC(8ec57ab4) SHA1(bd8e12c796d42d2cb27c1e47dc6253bfb74a2887) ) + + /* tiles */ + ROM_REGION( 0x500000, "k056832", ROMREGION_ERASE00 ) + TILE_WORD_ROM_LOAD( "535a19.17h", 0x000000, 2*1024*1024, CRC(fa1c59d1) SHA1(7344afab2b8101f979c35ff9ec8d9c18475bb821) ) + TILE_BYTE_ROM_LOAD( "535a18.13g", 0x000004, 512*1024, CRC(d02e5103) SHA1(43c63a718a034636bad29d2def054d8b48f071e3) ) + + /* sprites */ + ROM_REGION( 0x500000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD32_WORD( "535a17.25g", 0x000000, 1*1024*1024, CRC(b12070e2) SHA1(51a763bf0e2c1d5c2b9983fcd4304d74c7fe6dd1) ) + ROM_LOAD32_WORD( "535a13.28g", 0x000002, 1*1024*1024, CRC(10cf9d05) SHA1(6c6e51082ce340643d381863fec9b220e3d0ac53) ) + ROM_LOAD( "535a11.30g", 0x400000, 512*1024, CRC(2b176b0f) SHA1(ecf4114d95a308be8f96a5c602c0f5ed5ffc8f29) ) + + /* sound data */ + ROM_REGION( 0x200000, "k054539", 0 ) + ROM_LOAD( "535a22.9g", 0x000000, 2*1024*1024, CRC(7ee59acb) SHA1(782bf15f205e9fe7bd069f6445eb8187837dee32) ) +ROM_END + +/* Sexy Parodius version JAA (Japan) */ +ROM_START( sexyparo ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "533jaa02.31b", 0x200002, 512*1024, CRC(b8030abc) SHA1(ee0add1513f620e35583a6ec1e773f53ea27e455) ) + ROM_LOAD32_WORD_SWAP( "533jaa03.27b", 0x200000, 512*1024, CRC(4a95e80d) SHA1(ff0aef613745c07b5891e66b6b1759e048599214) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("533a08.9c", 0x000000, 128*1024, CRC(06d14cff) SHA1(21c01a06eabfacc4ac1d83bfad389f3dfa41b95f) ) + ROM_LOAD16_BYTE("533a09.7c", 0x000001, 128*1024, CRC(a93c6f0b) SHA1(bee1abab985c7163212cad1a4bc0a427804dfed3) ) + + /* tiles */ + ROM_REGION( 0x500000, "k056832", ROMREGION_ERASE00 ) + TILE_WORD_ROM_LOAD( "533a19.17h", 0x000000, 2*1024*1024, CRC(3ec1843e) SHA1(5d2c37f1eb299c846daa63f35ccd5334a516a1f5) ) + TILE_BYTE_ROM_LOAD( "533a18.13g", 0x000004, 512*1024, CRC(d3e0d058) SHA1(c50bdb3493501bfbbe092d01f5d4c38bfa3412f8) ) + + /* sprites */ + ROM_REGION( 0x600000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD32_WORD( "533a17.25g", 0x000000, 2*1024*1024, CRC(9947af57) SHA1(a8f67cb49cf55e8402de352bb530c7c90c643144) ) + ROM_LOAD32_WORD( "533a13.28g", 0x000002, 2*1024*1024, CRC(58f1fc38) SHA1(9662b4fb036ffe90f294ee36fa52a0c1e1dbd116) ) + ROM_LOAD( "533a11.30g", 0x400000, 2*1024*1024, CRC(983105e1) SHA1(c688f6f73fab16107f01523081558a2e02a5311c) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "533a22.9g", 0x000000, 2*1024*1024, CRC(97233814) SHA1(dba20a81517796b7baf7c82551bd7f1c1a8ecd7e) ) + ROM_LOAD( "533a23.7g", 0x200000, 2*1024*1024, CRC(1bb7552b) SHA1(3c6f96b4ab97737c3634c08b94dd304d5517d88d) ) +ROM_END + +/* Sexy Parodius version AAA (Asia) */ +ROM_START( sexyparoa ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "533aaa02.31b", 0x200002, 512*1024, CRC(4fdc4298) SHA1(6aa0d6d00dada9d1bfe2b29cd342b11e2d42bf5a) ) + ROM_LOAD32_WORD_SWAP( "533aaa03.27b", 0x200000, 512*1024, CRC(9c5e07cb) SHA1(4d7dbd9b0e47d501ab3f22c48942bb9e54450d87) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("533aaa08.9c", 0x000000, 128*1024, CRC(f2e2c963) SHA1(5b4ac1df208467cfac2927ce0b340090d631f190) ) + ROM_LOAD16_BYTE("533aaa09.7c", 0x000001, 128*1024, CRC(49086451) SHA1(8fdbeb5889e476dfd3f31619d5b5280a0494de69) ) + + /* tiles */ + ROM_REGION( 0x500000, "k056832", ROMREGION_ERASE00 ) + TILE_WORD_ROM_LOAD( "533a19.17h", 0x000000, 2*1024*1024, CRC(3ec1843e) SHA1(5d2c37f1eb299c846daa63f35ccd5334a516a1f5) ) + TILE_BYTE_ROM_LOAD( "533a18.13g", 0x000004, 512*1024, CRC(d3e0d058) SHA1(c50bdb3493501bfbbe092d01f5d4c38bfa3412f8) ) + + /* sprites */ + ROM_REGION( 0x600000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD32_WORD( "533a17.25g", 0x000000, 2*1024*1024, CRC(9947af57) SHA1(a8f67cb49cf55e8402de352bb530c7c90c643144) ) + ROM_LOAD32_WORD( "533a13.28g", 0x000002, 2*1024*1024, CRC(58f1fc38) SHA1(9662b4fb036ffe90f294ee36fa52a0c1e1dbd116) ) + ROM_LOAD( "533a11.30g", 0x400000, 2*1024*1024, CRC(983105e1) SHA1(c688f6f73fab16107f01523081558a2e02a5311c) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "533a22.9g", 0x000000, 2*1024*1024, CRC(97233814) SHA1(dba20a81517796b7baf7c82551bd7f1c1a8ecd7e) ) + ROM_LOAD( "533a23.7g", 0x200000, 2*1024*1024, CRC(1bb7552b) SHA1(3c6f96b4ab97737c3634c08b94dd304d5517d88d) ) +ROM_END + +ROM_START( rungun2 ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "505uaa03.27b", 0x200000, 512*1024, CRC(ad7f9ded) SHA1(824448daeb6109b822667e54baa1c73484642ac9) ) + ROM_LOAD32_WORD_SWAP( "505uaa02.31b", 0x200002, 512*1024, CRC(cfca23f7) SHA1(dfea871f0aaf6b2db6d924ddfd4174e7a14333e8) ) + + /* data roms */ + ROM_LOAD32_WORD_SWAP( "505a05.29r", 0x400000, 1024*1024, CRC(5da5d695) SHA1(02bfbfa4ba0213a23819828a9be02923740dccd6) ) + ROM_LOAD32_WORD_SWAP( "505a04.31r", 0x400002, 1024*1024, CRC(11a73f01) SHA1(0738f347f1b639130d512f31034888d2063767c0) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("505a06.9m", 0x000000, 128*1024, CRC(920013f1) SHA1(6bd7f2bdeaa777412d12eeef4ba6c7f952805739) ) + ROM_LOAD16_BYTE("505a07.7m", 0x000001, 128*1024, CRC(5641c603) SHA1(1af1f92032e7f870e1668e8d720742fb53c4d0e2) ) + + /* tiles */ + ROM_REGION( 0x600000, "k056832", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "505a21.11r", 0x000000, 1024*1024, CRC(03fda175) SHA1(4fdf7cfaa0d4024a2c40bba1f229c41e0627b8c8) ) + ROM_LOAD16_BYTE( "505a20.11m", 0x000001, 1024*1024, CRC(a6a300fb) SHA1(290d97c6ec36e3cab8e6fcd5310030e00fb0ce07) ) + + /* sprites */ + ROM_REGION( 0x1800000, "k055673", ROMREGION_ERASE00 ) + _48_WORD_ROM_LOAD( "505a19.14r", 0x0000000, 2*1024*1024, CRC(ffde4f17) SHA1(df93853f7bd3c775a15836b0ca9042f75eb65630) ) + _48_WORD_ROM_LOAD( "505a15.18r", 0x0000002, 2*1024*1024, CRC(d9ab1e6c) SHA1(748a61d939bd335c1b50f440e819303552b3d5a1) ) + _48_WORD_ROM_LOAD( "505a11.23r", 0x0000004, 2*1024*1024, CRC(75c13df0) SHA1(6680f75a67ca510fac29b65bce32fef64e844695) ) + _48_WORD_ROM_LOAD( "505a17.16r", 0x0600000, 2*1024*1024, CRC(8176f2f5) SHA1(d7944314b35bcd5301bbfba8a5b1ed6b35b9b888) ) + _48_WORD_ROM_LOAD( "505a13.21r", 0x0600002, 2*1024*1024, CRC(e60c5191) SHA1(02a8af81682838800489aa1123a453045d70acd8) ) + _48_WORD_ROM_LOAD( "505a09.25r", 0x0600004, 2*1024*1024, CRC(3e1d5a15) SHA1(ec4d46c2f2cc57e6193865357ffb3d62a9eecd4f) ) + _48_WORD_ROM_LOAD( "505a18.18m", 0x0c00000, 2*1024*1024, CRC(c12bacfe) SHA1(5b5f4dd9a51c7a305dd4de1354cd1df2ce75c932) ) + _48_WORD_ROM_LOAD( "505a14.14m", 0x0c00002, 2*1024*1024, CRC(356a75b0) SHA1(5f8b7a9d06d4207f19ed0f7c89513226488afde1) ) + _48_WORD_ROM_LOAD( "505a10.23m", 0x0c00004, 2*1024*1024, CRC(fc315ee0) SHA1(4dab661e0bd8e5386e52d514a1511ceba6e5b7bd) ) + _48_WORD_ROM_LOAD( "505a16.16m", 0x1200000, 2*1024*1024, CRC(ca9c2193) SHA1(cc3fb558b834e0b7914879ab47c3750170d257f4) ) + _48_WORD_ROM_LOAD( "505a12.21m", 0x1200002, 2*1024*1024, CRC(421d5034) SHA1(f7a85b7e41f3ddf9ddbdc6f8b6d3dbf8ba40d61b) ) + _48_WORD_ROM_LOAD( "505a08.25m", 0x1200004, 2*1024*1024, CRC(442ed3ec) SHA1(d44e1c4e9f8c63a8f754f8d20064cec15ae0b6d6) ) + + /* PSAC2 tiles */ + ROM_REGION( 0x200000, "gfx3", 0 ) + ROM_LOAD("505a24.22h", 0x000000, 2*1024*1024, CRC(70e906da) SHA1(4b1a412a71910633f48c6a0b9fd6949dcc82e365) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "505a23.7r", 0x000000, 2*1024*1024, CRC(67f03445) SHA1(9b5c1d1bb7b0ee275862d10effd9daed49568af4) ) + ROM_LOAD( "505a22.9r", 0x200000, 2*1024*1024, CRC(c2b67a9d) SHA1(9ff091972d7fad50bf0df2b3d8b5ee989e3df27f) ) +ROM_END + +/* Slam Dunk 2 */ +ROM_START( slamdnk2 ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "505jaa03.29m", 0x200000, 512*1024, CRC(52513794) SHA1(8a8fadb0eb582db53163620982dd53d1e5f8ca4c) ) + ROM_LOAD32_WORD_SWAP( "505jaa02.31m", 0x200002, 512*1024, CRC(9f72d48e) SHA1(6dd0520d0f0312e46f21ad4f6c41e47f3b5cb16b) ) + + /* data roms */ + ROM_LOAD32_WORD_SWAP( "505a05.29r", 0x400000, 1024*1024, CRC(5da5d695) SHA1(02bfbfa4ba0213a23819828a9be02923740dccd6) ) + ROM_LOAD32_WORD_SWAP( "505a04.31r", 0x400002, 1024*1024, CRC(11a73f01) SHA1(0738f347f1b639130d512f31034888d2063767c0) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("505a06.9m", 0x000000, 128*1024, CRC(920013f1) SHA1(6bd7f2bdeaa777412d12eeef4ba6c7f952805739) ) + ROM_LOAD16_BYTE("505a07.7m", 0x000001, 128*1024, CRC(5641c603) SHA1(1af1f92032e7f870e1668e8d720742fb53c4d0e2) ) + + /* tiles */ + ROM_REGION( 0x600000, "k056832", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "505a21.11r", 0x000000, 1024*1024, CRC(03fda175) SHA1(4fdf7cfaa0d4024a2c40bba1f229c41e0627b8c8) ) + ROM_LOAD16_BYTE( "505a20.11m", 0x000001, 1024*1024, CRC(a6a300fb) SHA1(290d97c6ec36e3cab8e6fcd5310030e00fb0ce07) ) + + /* sprites */ + ROM_REGION( 0x1800000, "k055673", ROMREGION_ERASE00 ) + _48_WORD_ROM_LOAD( "505a19.14r", 0x0000000, 2*1024*1024, CRC(ffde4f17) SHA1(df93853f7bd3c775a15836b0ca9042f75eb65630) ) + _48_WORD_ROM_LOAD( "505a15.18r", 0x0000002, 2*1024*1024, CRC(d9ab1e6c) SHA1(748a61d939bd335c1b50f440e819303552b3d5a1) ) + _48_WORD_ROM_LOAD( "505a11.23r", 0x0000004, 2*1024*1024, CRC(75c13df0) SHA1(6680f75a67ca510fac29b65bce32fef64e844695) ) + _48_WORD_ROM_LOAD( "505a17.16r", 0x0600000, 2*1024*1024, CRC(8176f2f5) SHA1(d7944314b35bcd5301bbfba8a5b1ed6b35b9b888) ) + _48_WORD_ROM_LOAD( "505a13.21r", 0x0600002, 2*1024*1024, CRC(e60c5191) SHA1(02a8af81682838800489aa1123a453045d70acd8) ) + _48_WORD_ROM_LOAD( "505a09.25r", 0x0600004, 2*1024*1024, CRC(3e1d5a15) SHA1(ec4d46c2f2cc57e6193865357ffb3d62a9eecd4f) ) + _48_WORD_ROM_LOAD( "505a18.18m", 0x0c00000, 2*1024*1024, CRC(c12bacfe) SHA1(5b5f4dd9a51c7a305dd4de1354cd1df2ce75c932) ) + _48_WORD_ROM_LOAD( "505a14.14m", 0x0c00002, 2*1024*1024, CRC(356a75b0) SHA1(5f8b7a9d06d4207f19ed0f7c89513226488afde1) ) + _48_WORD_ROM_LOAD( "505a10.23m", 0x0c00004, 2*1024*1024, CRC(fc315ee0) SHA1(4dab661e0bd8e5386e52d514a1511ceba6e5b7bd) ) + _48_WORD_ROM_LOAD( "505a16.16m", 0x1200000, 2*1024*1024, CRC(ca9c2193) SHA1(cc3fb558b834e0b7914879ab47c3750170d257f4) ) + _48_WORD_ROM_LOAD( "505a12.21m", 0x1200002, 2*1024*1024, CRC(421d5034) SHA1(f7a85b7e41f3ddf9ddbdc6f8b6d3dbf8ba40d61b) ) + _48_WORD_ROM_LOAD( "505a08.25m", 0x1200004, 2*1024*1024, CRC(442ed3ec) SHA1(d44e1c4e9f8c63a8f754f8d20064cec15ae0b6d6) ) + + + /* PSAC2 tiles */ + ROM_REGION( 0x200000, "gfx3", 0 ) + ROM_LOAD("505a24.22h", 0x000000, 2*1024*1024, CRC(70e906da) SHA1(4b1a412a71910633f48c6a0b9fd6949dcc82e365) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "505a23.7r", 0x000000, 2*1024*1024, CRC(67f03445) SHA1(9b5c1d1bb7b0ee275862d10effd9daed49568af4) ) + ROM_LOAD( "505a22.9r", 0x200000, 2*1024*1024, CRC(c2b67a9d) SHA1(9ff091972d7fad50bf0df2b3d8b5ee989e3df27f) ) +ROM_END + +/* Rushing Heroes */ +ROM_START( rushhero ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "605uab03.29m", 0x200000, 512*1024, CRC(c5b8d31d) SHA1(6c5b359e1fcf511c50d6a876946631fc38a6dade) ) + ROM_LOAD32_WORD_SWAP( "605uab02.31m", 0x200002, 512*1024, CRC(94c3d835) SHA1(f48d34987fa6575a2c41d3ca3359e9e2cbc817e0) ) + + /* data roms */ + ROM_LOAD32_WORD_SWAP( "605a05.29r", 0x400000, 1024*1024, CRC(9bca4297) SHA1(c20be1ffcee8bd56f69d4fcc19d0035b3f74b8f2) ) + ROM_LOAD32_WORD_SWAP( "605a04.31r", 0x400002, 1024*1024, CRC(f6788154) SHA1(093c145d5348b4f10193acc258f5539bd59138a1) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("605a06.9m", 0x000000, 128*1024, CRC(9ca03dce) SHA1(008106e864d8390d7ae8645a2fe06d0eaaa746e0) ) + ROM_LOAD16_BYTE("605a07.7m", 0x000001, 128*1024, CRC(3116a8b0) SHA1(f0899d7027464d9aad45ffa6a464288a51a80dc1) ) + + /* tiles */ + ROM_REGION( 0x600000, "k056832", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "605a21.11r", 0x000000, 1024*1024, CRC(0e5add29) SHA1(f80d81ff8110825ba19ebc3cf50480b8cf275571) ) + ROM_LOAD16_BYTE( "605a20.11m", 0x000001, 1024*1024, CRC(a8fb4288) SHA1(b0ee6c2add5a8063f771ac8bbdfd78c0382a5036) ) + + /* sprites */ + ROM_REGION( 0x3000000, "k055673", ROMREGION_ERASE00 ) + _48_WORD_ROM_LOAD( "605a19.14r", 0x0000000, 4*1024*1024, CRC(293427d0) SHA1(c31f93797bda09ea7e990100a5556eb0fde64968) ) + _48_WORD_ROM_LOAD( "605a15.18r", 0x0000002, 4*1024*1024, CRC(19e6e356) SHA1(b2568e14d6fb9a9792f95aafcf694dbf00c0d2c8) ) + _48_WORD_ROM_LOAD( "605a11.23r", 0x0000004, 4*1024*1024, CRC(bc61339c) SHA1(77a5737501bf8ffd7ae4192a6e5924c479eb6655) ) + _48_WORD_ROM_LOAD( "605a17.16r", 0x0c00000, 4*1024*1024, CRC(7a8f1cf9) SHA1(4c07f846915bded61c40876a10f5457e8895ad58) ) + _48_WORD_ROM_LOAD( "605a13.21r", 0x0c00002, 4*1024*1024, CRC(9a6dff6d) SHA1(cbc200bde5933098e768db8d3021f77bdfe454b8) ) + _48_WORD_ROM_LOAD( "605a09.25r", 0x0c00004, 4*1024*1024, CRC(624fd486) SHA1(edd81d5487f8239ffa89b931430cf41f06a17cf6) ) + _48_WORD_ROM_LOAD( "605a18.14m", 0x1800000, 4*1024*1024, CRC(4d4dbecb) SHA1(7c3cb2739d6b729d855d652b1991c7af6cd79d1c) ) + _48_WORD_ROM_LOAD( "605a14.18m", 0x1800002, 4*1024*1024, CRC(b5115d76) SHA1(48c3119afb649c58d4df36806fe5530ddd379782) ) + _48_WORD_ROM_LOAD( "605a10.23m", 0x1800004, 4*1024*1024, CRC(4f47d434) SHA1(c4503993c738e1b8df6f045f5a82504363682db7) ) + _48_WORD_ROM_LOAD( "605a16.16m", 0x2400000, 4*1024*1024, CRC(aab542ca) SHA1(9728b028f48768236f47a7a9bddb27944297b583) ) + _48_WORD_ROM_LOAD( "605a12.21m", 0x2400002, 4*1024*1024, CRC(194ffad0) SHA1(1c56f4e89bfe72b435793b907e7ca3e62ecddf4b) ) + _48_WORD_ROM_LOAD( "605a08.25m", 0x2400004, 4*1024*1024, CRC(ea80ddfd) SHA1(4be61af09bcc80c97505196a6f43797753d14f85) ) + + /* PSAC2 tiles */ + ROM_REGION( 0x200000, "gfx3", 0 ) + ROM_LOAD("605a24.22h", 0x000000, 2*1024*1024, CRC(73f06065) SHA1(8ca6747204a4c2cf59f19bcc9fce280e796e4a6e) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "605a23.7r", 0x000000, 4*1024*1024, CRC(458ecee1) SHA1(4adcbbff312597716c6db1cd5df6cdf7022d4961) ) +ROM_END + +/* Taisen Tokkae-dama */ +ROM_START( tokkae ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "615jaa02.31b", 0x200002, 512*1024, CRC(f66d6dbf) SHA1(16c4a84e37475d3773b505f33f8a0ee8168f282f) ) + ROM_LOAD32_WORD_SWAP( "615jaa03.27b", 0x200000, 512*1024, CRC(b7760e2b) SHA1(7903d8c2d32ef7d324e965e52544a9a41abf62fd) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("615a08.9c", 0x000000, 128*1024, CRC(a5340de4) SHA1(96d74624f44423e57fe8fcecadecdd76d91c27bc) ) + ROM_LOAD16_BYTE("615a09.7c", 0x000001, 128*1024, CRC(c61f954c) SHA1(5242a2872db1db9ab4edd9951c2ac2d872f06dc7) ) + + /* tiles */ + ROM_REGION( 0x500000, "k056832", ROMREGION_ERASE00 ) + TILE_WORDS2_ROM_LOAD( "615a19.17h", 0x000000, 1*1024*1024, CRC(07749e1e) SHA1(79a5f979b1dc7fa92ae37af03447edf4885ecdf8) ) + TILE_BYTES2_ROM_LOAD( "615a20.13c", 0x000004, 512*1024, CRC(9911b5a1) SHA1(7dc9348fd23331ca7614db27dc5f280610f87a20) ) + + /* sprites */ + ROM_REGION( 0xa00000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD32_WORD( "615a17.25g", 0x000000, 2*1024*1024, CRC(b864654b) SHA1(bbd74c992ba3c3c629520e68687d7c8f3c26d0b9) ) + ROM_LOAD32_WORD( "615a13.28g", 0x000002, 2*1024*1024, CRC(4e8afa1a) SHA1(d980104ddf9670e689236f381db3345471aff6fd) ) + ROM_LOAD32_WORD( "615a16.18h", 0x400000, 2*1024*1024, CRC(dfa0f0fe) SHA1(4f68767f8329f6348055a472d923557e7dec3154) ) + ROM_LOAD32_WORD( "615a12.27g", 0x400002, 2*1024*1024, CRC(fbc563fd) SHA1(19a6544297e0eade09e69741b9e3d8b32c7e2794) ) + + ROM_LOAD( "615a11.30g", 0x800000, 2*1024*1024, CRC(f25946e4) SHA1(e7744cdbeccc7325fdb31e134fed71d4cf8f9b0a) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "615a22.9g", 0x000000, 2*1024*1024, CRC(ea7e47dd) SHA1(5bf5bad9427b083757c400eaf58c63a6267c1caf) ) + ROM_LOAD( "615a23.7g", 0x200000, 2*1024*1024, CRC(22d71f36) SHA1(3f24bb4cd8e1d693b42219e05960ad0c756b08cb) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "tokkae.nv", 0x0000, 0x080, CRC(5a6f8da6) SHA1(f68c67c98e99669904e23d5eac7e13a9c57bc394) ) +ROM_END + +/* Tokimeki Memorial Taisen Puzzle-dama */ +ROM_START( tkmmpzdm ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "515jab02.31b", 0x200002, 512*1024, CRC(60d4d577) SHA1(5320ce2e004f01ca73e2f2048a622f14ab7a053d) ) + ROM_LOAD32_WORD_SWAP( "515jab03.27b", 0x200000, 512*1024, CRC(c383413d) SHA1(1227e4c8bfdb5149896da81efa0109a55ae62708) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("515a04.9c", 0x000000, 128*1024, CRC(a9b7bb45) SHA1(ad11a7b5c24a03658ff4309dbd8c7334f4adf7b4) ) + ROM_LOAD16_BYTE("515a05.7c", 0x000001, 128*1024, CRC(dea4ca2f) SHA1(5d11469a93293381228233baad6896e098994d9b) ) + + /* tiles */ + ROM_REGION( 0x500000, "k056832", ROMREGION_ERASE00 ) + TILE_WORDS2_ROM_LOAD( "515a11.17h", 0x000000, 1024*1024, CRC(8689852d) SHA1(42ba16a9dfba47132fe07c6b1d044c5b32753220) ) + TILE_BYTES2_ROM_LOAD( "515a12.13c", 0x000004, 512*1024, CRC(6936f94a) SHA1(e2c7fc327638ee39eef6109c4f164eaf98972f00) ) + + /* sprites */ + ROM_REGION( 0xa00000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD32_WORD( "515a10.25g", 0x000000, 2*1024*1024, CRC(e6e7ab7e) SHA1(3f7ddab4b814673264b542d2a8761c56f82f2180) ) + ROM_LOAD32_WORD( "515a08.28g", 0x000002, 2*1024*1024, CRC(5613daea) SHA1(43480c8104582cc27d8ab6920ec113e660de5ae7) ) + ROM_LOAD32_WORD( "515a09.18h", 0x400000, 2*1024*1024, CRC(28ffdb48) SHA1(8511def7bb151f912755c2bbcb0cae1a2e52f405) ) + ROM_LOAD32_WORD( "515a07.27g", 0x400002, 2*1024*1024, CRC(246e6cb1) SHA1(a320e0820895717c765d07f80cf7983b502af8f0) ) + ROM_LOAD( "515a06.30g", 0x800000, 2*1024*1024, CRC(13b7b953) SHA1(4393c5b3515f3ded9db3ac5d59308f99f40f2b76) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "515a13.9g", 0x000000, 2*1024*1024, CRC(4b066b00) SHA1(874dd49847b10e6d9c39decb81557534baa36d79) ) + ROM_LOAD( "515a14.7g", 0x200000, 2*1024*1024, CRC(128cc944) SHA1(b0cd2ec1b9a2ac936d57b6d6c2a70f9c13dc97a5) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "tkmmpzdm.nv", 0x0000, 0x080, CRC(850ab8c4) SHA1(fea5ceb3f2cea61fb19bdb1b8f1496d1c06bfff1) ) +ROM_END + +/* Winning Spike - Version EAA (Euro) */ +ROM_START( winspike ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "705eaa02.31b", 0x200002, 512*1024, CRC(522d1bbd) SHA1(08280a90c64adacfe4d1f0abc939bbf3f8265aeb) ) + ROM_LOAD32_WORD_SWAP( "705eaa03.27b", 0x200000, 512*1024, CRC(778de17b) SHA1(6ccf1169542259c05d16cff706f782837eeafb46) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("705a08.9c", 0x000000, 128*1024, CRC(0d531639) SHA1(14a72925f75528e7b4d6b701b2b51f4557f031f0) ) + ROM_LOAD16_BYTE("705a09.7c", 0x000001, 128*1024, CRC(24e58845) SHA1(a01caced5bad9d98a3f33d72ca5eb9096c45e4ba) ) + + /* tiles: length of 1 meg each is TRUSTED by the internal checksum code */ + /* do NOT change these to the 4 meg dumps again, those are WRONG!!!!!!! */ + ROM_REGION( 0x800000, "k056832", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "705a19.17h", 0x000000, 0x100000, CRC(bab84b30) SHA1(8522a0dc5e37524f51d632e9d975e949a14c0dc3) ) + ROM_LOAD16_BYTE( "705a18.22h", 0x000001, 0x100000, CRC(eb97fb5f) SHA1(13de0ad060fd6f1312fa10edde1fef6481e8df64) ) + + /* sprites */ + ROM_REGION( 0x1000000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD64_WORD( "705a17.25g", 0x000000, 0x400000, CRC(971d2812) SHA1(ee0819faf6f6c8420d5d3742cb39dfb76b9ce7a4) ) + ROM_LOAD64_WORD( "705a13.28g", 0x000002, 0x400000, CRC(3b62584b) SHA1(69718f47ff1e8d65a11972af1ed5068db175f625) ) + ROM_LOAD64_WORD( "705a11.30g", 0x000004, 0x400000, CRC(68542ce9) SHA1(a4294da1d1026e3a9d070575e5855935389a705f) ) + ROM_LOAD64_WORD( "705a10.33g", 0x000006, 0x400000, CRC(fc4dc78b) SHA1(520cdcf9ca20ec1c84be734e06e183e7a871090b) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "705a22.9g", 0x000000, 4*1024*1024, CRC(1a9246f6) SHA1(a40ff43310d035f7b88c4e397a4ee75151578c17) ) +ROM_END + + +/* +Winning Spike (Version JAA) +Konami, 1997 + +System GX with Type 2 ROM board. + +PCB No: PWB454204C + +Not much on this PCB, 6 logic IC's, 1 unknown PLCC84 (stamped 0000032652) +and the ROMs, that's all. Main GX motherboard is standard (PWB300456A) + +ROMs : + Filename Type + ---------------------------- + 705JAA03.27B 27C4096 + 705JAA02.31B 27C4096 + 705A10.33G (16M/32M) + 705A11.30G (16M/32M) + 705A13.28G (8M) (Alternate read (13a) is 8M, initial read is 32M, since ROMCMP doesn't give a error about the 32M read) + 705A17.25G (16M/32M) + 705A18.13G (8M/16M/32M) + 705A19.10G (8M/16M/32M) + 705A22.9G (8M/16M/32M) + 705A08.9C 27C010 + 705A09.7C 27C010 +*/ + +/* Winning Spike - Version JAA (Japan) */ +ROM_START( winspikej ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "705jaa02.31b", 0x200002, 512*1024, CRC(85f11b03) SHA1(ab597d16df654179050cc029179aaf946f0426c5) ) + ROM_LOAD32_WORD_SWAP( "705jaa03.27b", 0x200000, 512*1024, CRC(1d5e3922) SHA1(b5e1fd1ea4f872159522e64c2725bf8441a58ef9) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("705a08.9c", 0x000000, 128*1024, CRC(0d531639) SHA1(14a72925f75528e7b4d6b701b2b51f4557f031f0) ) + ROM_LOAD16_BYTE("705a09.7c", 0x000001, 128*1024, CRC(24e58845) SHA1(a01caced5bad9d98a3f33d72ca5eb9096c45e4ba) ) + + /* tiles: length of 1 meg each is TRUSTED by the internal checksum code */ + /* do NOT change these to the 4 meg dumps again, those are WRONG!!!!!!! */ + ROM_REGION( 0x800000, "k056832", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "705a19.17h", 0x000000, 0x100000, CRC(bab84b30) SHA1(8522a0dc5e37524f51d632e9d975e949a14c0dc3) ) + ROM_LOAD16_BYTE( "705a18.22h", 0x000001, 0x100000, CRC(eb97fb5f) SHA1(13de0ad060fd6f1312fa10edde1fef6481e8df64) ) + + /* sprites */ + ROM_REGION( 0x1000000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD64_WORD( "705a17.25g", 0x000000, 0x400000, CRC(971d2812) SHA1(ee0819faf6f6c8420d5d3742cb39dfb76b9ce7a4) ) + ROM_LOAD64_WORD( "705a13.28g", 0x000002, 0x400000, CRC(3b62584b) SHA1(69718f47ff1e8d65a11972af1ed5068db175f625) ) + ROM_LOAD64_WORD( "705a11.30g", 0x000004, 0x400000, CRC(68542ce9) SHA1(a4294da1d1026e3a9d070575e5855935389a705f) ) + ROM_LOAD64_WORD( "705a10.33g", 0x000006, 0x400000, CRC(fc4dc78b) SHA1(520cdcf9ca20ec1c84be734e06e183e7a871090b) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "705a22.9g", 0x000000, 4*1024*1024, CRC(1a9246f6) SHA1(a40ff43310d035f7b88c4e397a4ee75151578c17) ) +ROM_END + +/* Crazy Cross */ +ROM_START( crzcross ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "315eaa02.31b", 0x200002, 512*1024, CRC(9c0faa4b) SHA1(b6ebe712e791678a4ce16767d2d80872963c6507) ) + ROM_LOAD32_WORD_SWAP( "315eaa04.27b", 0x200000, 512*1024, CRC(c89dd3e5) SHA1(933d1b1e3bf7ac7a7cda4b1968a02f3f0769c86b) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("315a06.9c", 0x000000, 128*1024, CRC(06580a9f) SHA1(75e13aa13e3c1060cdd630c101d6644b3904317f) ) + ROM_LOAD16_BYTE("315a07.7c", 0x000001, 128*1024, CRC(431c58f3) SHA1(4888e305875d56cca5e1d792bdf27e57b3e42b03) ) + + /* tiles */ + ROM_REGION( 0xa00000, "k056832", ROMREGION_ERASE00 ) + TILE_WORD_ROM_LOAD( "315a14.17h", 0x000000, 512*1024, CRC(0ab731e0) SHA1(1f7d6ce40e689e1dddfee656bb46bd044012c2d6) ) + TILE_BYTE_ROM_LOAD( "315a12.13g", 0x000004, 2*1024*1024, CRC(3047b8d2) SHA1(99fa4d20ee5aae89b9093ceb581f187bc9acc0ae) ) + + /* sprites */ + ROM_REGION( 0x500000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD32_WORD( "315a11.25g", 0x000000, 2*1024*1024, CRC(b8a99c29) SHA1(60086f663aa6cbfc3fb378caeb2509c65637564e) ) + ROM_LOAD32_WORD( "315a10.28g", 0x000002, 2*1024*1024, CRC(77d175dc) SHA1(73506df30db5ce38a9a21a1dce3e8b4cc1dfa7be) ) + ROM_LOAD( "315a09.30g", 0x400000, 1*1024*1024, CRC(82580329) SHA1(99749a67f1843dfd0fe93cc6bbcbc126b7bb7fb4) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "315a17.9g", 0x000000, 2*1024*1024, CRC(ea763d61) SHA1(2a7dcb2a2a23c9fea62fb82ffc18949bf15b9f6f) ) + ROM_LOAD( "315a18.7g", 0x200000, 2*1024*1024, CRC(6e416cee) SHA1(145a766ad2fa2b692692053dd36e0caf51d67a56) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error + ROM_LOAD( "crzcross.nv", 0x0000, 0x080, CRC(446f178c) SHA1(84b02192c26459c1b798f07b96768e1013b57666) ) +ROM_END + +/* Taisen Puzzle-dama */ +ROM_START( puzldama ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "315jaa02.31b", 0x200002, 512*1024, CRC(e0a35c7d) SHA1(6f35dc0c43fa331fc71968c67f111fb73e5add2f) ) + ROM_LOAD32_WORD_SWAP( "315jaa04.27b", 0x200000, 512*1024, CRC(abe4f0e7) SHA1(ece76088c61eddcad2efb554937d24d642d38be6) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("315a06.9c", 0x000000, 128*1024, CRC(06580a9f) SHA1(75e13aa13e3c1060cdd630c101d6644b3904317f) ) + ROM_LOAD16_BYTE("315a07.7c", 0x000001, 128*1024, CRC(431c58f3) SHA1(4888e305875d56cca5e1d792bdf27e57b3e42b03) ) + + /* tiles */ + ROM_REGION( 0xa00000, "k056832", ROMREGION_ERASE00 ) + TILE_WORD_ROM_LOAD( "315a14.17h", 0x000000, 512*1024, CRC(0ab731e0) SHA1(1f7d6ce40e689e1dddfee656bb46bd044012c2d6) ) + TILE_BYTE_ROM_LOAD( "315a12.13g", 0x000004, 2*1024*1024, CRC(3047b8d2) SHA1(99fa4d20ee5aae89b9093ceb581f187bc9acc0ae) ) + + /* sprites */ + ROM_REGION( 0x500000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD32_WORD( "315a11.25g", 0x000000, 2*1024*1024, CRC(b8a99c29) SHA1(60086f663aa6cbfc3fb378caeb2509c65637564e) ) + ROM_LOAD32_WORD( "315a10.28g", 0x000002, 2*1024*1024, CRC(77d175dc) SHA1(73506df30db5ce38a9a21a1dce3e8b4cc1dfa7be) ) + ROM_LOAD( "315a09.30g", 0x400000, 1*1024*1024, CRC(82580329) SHA1(99749a67f1843dfd0fe93cc6bbcbc126b7bb7fb4) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "315a17.9g", 0x000000, 2*1024*1024, CRC(ea763d61) SHA1(2a7dcb2a2a23c9fea62fb82ffc18949bf15b9f6f) ) + ROM_LOAD( "315a18.7g", 0x200000, 2*1024*1024, CRC(6e416cee) SHA1(145a766ad2fa2b692692053dd36e0caf51d67a56) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error + ROM_LOAD( "puzldama.nv", 0x0000, 0x080, CRC(bda98b84) SHA1(f4b03130bdc2a5bc6f0fc9ca21603109d82703b4) ) +ROM_END + +/* Dragoon Might */ +ROM_START( dragoonj ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "417jaa02.31b", 0x200002, 512*1024, CRC(533cbbd5) SHA1(4b7a0345ce0e503c647c7cde6f284ad0ee10f0ff) ) + ROM_LOAD32_WORD_SWAP( "417jaa03.27b", 0x200000, 512*1024, CRC(8e1f883f) SHA1(e9f25c0fae7491c55812fda336436a2884c4d417) ) + + /* data roms */ + ROM_LOAD32_WORD_SWAP( "417a04.26c", 0x400002, 1024*1024, CRC(dc574747) SHA1(43cbb6a08c27bb96bb25568c3b636c44fff3e08e) ) + ROM_LOAD32_WORD_SWAP( "417a05.23c", 0x400000, 1024*1024, CRC(2ee2c587) SHA1(a1b2b288c375a3406d4b12e66c973484c03fe26e) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("417a06.9c", 0x000000, 128*1024, CRC(8addbbee) SHA1(fdb38fab1fd65b7362578b108bf6128e926b5f13) ) + ROM_LOAD16_BYTE("417a07.7c", 0x000001, 128*1024, CRC(c1fd7584) SHA1(1b204165ef07b6b53f47adc16eed69d11dab53b2) ) + + /* tiles */ + ROM_REGION( 0x400000, "k056832", ROMREGION_ERASE00 ) + TILE_WORD_ROM_LOAD( "417a16.17h", 0x000000, 2*1024*1024, CRC(88b2213b) SHA1(ac4ac57618cf98d7486b147f5494e6943bff1a4d) ) + + /* sprites */ + ROM_REGION( 0x1000000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD32_WORD( "417a15.25g", 0x000000, 2*1024*1024, CRC(83bccd01) SHA1(c0e65c43115164c3f64ac14a449c65c4e3e3c4cf) ) + ROM_LOAD32_WORD( "417a11.28g", 0x000002, 2*1024*1024, CRC(624a7c4c) SHA1(5fda37cd02b4dcb328b80b29041214c685c77a78) ) + ROM_LOAD32_WORD( "417a14.18h", 0x400000, 2*1024*1024, CRC(fbf551f1) SHA1(871c5804aba9845aa04596db51def3ba3b8bae30) ) + ROM_LOAD32_WORD( "417a10.27g", 0x400002, 2*1024*1024, CRC(18fde49f) SHA1(f85b2981172be2cddc5d691bb803f0133a36cb1a) ) + ROM_LOAD32_WORD( "417a13.20h", 0x800000, 2*1024*1024, CRC(d2e3959d) SHA1(efe516e6b84c67c0a154726a0f7f7054ee866738) ) + ROM_LOAD32_WORD( "417a09.30g", 0x800002, 2*1024*1024, CRC(b5653e24) SHA1(ffa44d6b65feef298fa4dcc064ebd173c7cc22aa) ) + ROM_LOAD32_WORD( "417a12.23h", 0xc00000, 2*1024*1024, CRC(25496115) SHA1(e53164f8ad95187011059c465a67fff1d18ba888) ) + ROM_LOAD32_WORD( "417a08.33g", 0xc00002, 2*1024*1024, CRC(801e9d93) SHA1(9364d802b4ca03e652b25304c8298be8de8936b4) ) + + /* sound data */ + ROM_REGION( 0x200000, "k054539", 0 ) + ROM_LOAD( "417a17.9g", 0x000000, 2*1024*1024, CRC(88d47dfd) SHA1(b5d6dd7ee9ac0c427dc3e714a97945c954260913) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "dragoonj.nv", 0x0000, 0x080, CRC(cbe16082) SHA1(da48893f3584ae2e034c73d4338b220107a884da) ) +ROM_END + +/* Dragoon Might (Asia) */ +ROM_START( dragoona ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "417aab02.31b", 0x200002, 512*1024, CRC(0421c19c) SHA1(7b79685047df996f6eda6d9bd6327d7a1cf40dd6) ) + ROM_LOAD32_WORD_SWAP( "417aab03.27b", 0x200000, 512*1024, CRC(813dd8d5) SHA1(fb07e4836662d179902b751fefcf19f004a4f009) ) + + /* data roms */ + ROM_LOAD32_WORD_SWAP( "417a04.26c", 0x400002, 1024*1024, CRC(dc574747) SHA1(43cbb6a08c27bb96bb25568c3b636c44fff3e08e) ) + ROM_LOAD32_WORD_SWAP( "417a05.23c", 0x400000, 1024*1024, CRC(2ee2c587) SHA1(a1b2b288c375a3406d4b12e66c973484c03fe26e) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("417a06.9c", 0x000000, 128*1024, CRC(8addbbee) SHA1(fdb38fab1fd65b7362578b108bf6128e926b5f13) ) + ROM_LOAD16_BYTE("417a07.7c", 0x000001, 128*1024, CRC(c1fd7584) SHA1(1b204165ef07b6b53f47adc16eed69d11dab53b2) ) + + /* tiles */ + ROM_REGION( 0x400000, "k056832", ROMREGION_ERASE00 ) + TILE_WORD_ROM_LOAD( "417a16.17h", 0x000000, 2*1024*1024, CRC(88b2213b) SHA1(ac4ac57618cf98d7486b147f5494e6943bff1a4d) ) + + /* sprites */ + ROM_REGION( 0x1000000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD32_WORD( "417a15.25g", 0x000000, 2*1024*1024, CRC(83bccd01) SHA1(c0e65c43115164c3f64ac14a449c65c4e3e3c4cf) ) + ROM_LOAD32_WORD( "417a11.28g", 0x000002, 2*1024*1024, CRC(624a7c4c) SHA1(5fda37cd02b4dcb328b80b29041214c685c77a78) ) + ROM_LOAD32_WORD( "417a14.18h", 0x400000, 2*1024*1024, CRC(fbf551f1) SHA1(871c5804aba9845aa04596db51def3ba3b8bae30) ) + ROM_LOAD32_WORD( "417a10.27g", 0x400002, 2*1024*1024, CRC(18fde49f) SHA1(f85b2981172be2cddc5d691bb803f0133a36cb1a) ) + ROM_LOAD32_WORD( "417a13.20h", 0x800000, 2*1024*1024, CRC(d2e3959d) SHA1(efe516e6b84c67c0a154726a0f7f7054ee866738) ) + ROM_LOAD32_WORD( "417a09.30g", 0x800002, 2*1024*1024, CRC(b5653e24) SHA1(ffa44d6b65feef298fa4dcc064ebd173c7cc22aa) ) + ROM_LOAD32_WORD( "417a12.23h", 0xc00000, 2*1024*1024, CRC(25496115) SHA1(e53164f8ad95187011059c465a67fff1d18ba888) ) + ROM_LOAD32_WORD( "417a08.33g", 0xc00002, 2*1024*1024, CRC(801e9d93) SHA1(9364d802b4ca03e652b25304c8298be8de8936b4) ) + + /* sound data */ + ROM_REGION( 0x200000, "k054539", 0 ) + ROM_LOAD( "417a17.9g", 0x000000, 2*1024*1024, CRC(88d47dfd) SHA1(b5d6dd7ee9ac0c427dc3e714a97945c954260913) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "dragoona.nv", 0x0000, 0x080, CRC(7980ad2b) SHA1(dccaab02d23edbd81ae13441fbac0dbd7112c258) ) +ROM_END + +/* Soccer Superstars (94.12.19 - Europe ver EAC) Writes EAA to EEPROM and reports as EAA despite chip labels EAC */ +ROM_START( soccerss ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "427eac02.28m", 0x200000, 512*1024, CRC(1817b218) SHA1(d69c70f0d8f1cbf385046c755a9533c01fe1eb4a) ) + ROM_LOAD32_WORD_SWAP( "427eac03.30m", 0x200002, 512*1024, CRC(8a17f509) SHA1(c3944b766499f2b6f217357159a02e54e44060c2) ) + + /* data roms */ + ROM_LOAD32_WORD_SWAP( "427a04.28r", 0x400000, 0x080000, CRC(c7d3e1a2) SHA1(5e1e4f4c97def36902ad853248014a7af62e0c5e) ) + ROM_LOAD32_WORD_SWAP( "427a05.30r", 0x400002, 0x080000, CRC(5372f0a5) SHA1(36e8d0a73918cbd018c1865d1a05445daba8997c) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("427a07.6m", 0x000000, 128*1024, CRC(8dbaf4c7) SHA1(cb69bf94090a4871b35e7ba1f58e3225077b82cd) ) + ROM_LOAD16_BYTE("427a06.9m", 0x000001, 128*1024, CRC(979df65d) SHA1(7499e9a27aa562692bd3a296789696492a6254bc) ) + + /* tiles */ + ROM_REGION( 0x500000, "k056832", ROMREGION_ERASE00 ) + TILE_WORDS2_ROM_LOAD( "427a15.11r", 0x000000, 0x100000, CRC(33ce2b8e) SHA1(b0936386cdc7c41f33b1d7b4f5ce25fe618d1286) ) + TILE_BYTES2_ROM_LOAD( "427a14.143", 0x000004, 0x080000, CRC(7575a0ed) SHA1(92fda2747ac090f93e60cff8478af6721b949dc2) ) + + /* sprites */ + ROM_REGION( 0xc00000, "k055673", ROMREGION_ERASE00 ) + _48_WORD_ROM_LOAD( "427a13.18r", 0x000000, 2*1024*1024, CRC(815a9b87) SHA1(7d9d5932fff7dd7aa4cbccf0c8d3784dc8042e70) ) + _48_WORD_ROM_LOAD( "427a11.23r", 0x000002, 2*1024*1024, CRC(c1ca74c1) SHA1(b7286df8e59f8f1939ebf17aaf9345a857b0b100) ) + _48_WORD_ROM_LOAD( "427a09.137", 0x000004, 2*1024*1024, CRC(56bdd480) SHA1(01d164aedc77f71f6310cfd739c00b33289a2e7e) ) + _48_WORD_ROM_LOAD( "427a12.21r", 0x600000, 2*1024*1024, CRC(97d6fd38) SHA1(8d2895850cafdea95db08c84e7eeea90a1921515) ) + _48_WORD_ROM_LOAD( "427a10.25r", 0x600002, 2*1024*1024, CRC(6b3ccb41) SHA1(b246ef350a430e60f0afd1b80ff48139c325e926) ) + _48_WORD_ROM_LOAD( "427a08.140", 0x600004, 2*1024*1024, CRC(221250af) SHA1(fd24e7f0e3024df5aa08506523953c5e35d2267b) ) + + /* PSAC2 tiles */ + ROM_REGION( 0x100000, "gfx3", ROMREGION_ERASE00 ) + ROM_LOAD( "427a18.145", 0x000000, 0x100000, CRC(bb6e6ec6) SHA1(aa1365a4318866d9e7e74461a6e6c113f83b6771) ) + + /* PSAC2 map data */ + ROM_REGION( 0x080000, "gfx4", ROMREGION_ERASE00 ) + // 4 banks of 0x20000? (only the first 2 seem valid tho) + // maybe this is CPU addressable and the 'garbage' is sprite related? + ROM_LOAD( "427a17.24c", 0x000000, 0x080000, CRC(fb6eb01f) SHA1(28cdb30ff70ee5fc7624e18fe048dd85dfa49ace) ) + /* 0x00000-0x1ffff pitch+crowd */ + + /* 0x20000-0x2ffff attract screens */ + /* 0x30000-0x3ffff garbage? */ + + /* 0x40000-0x4ffff blank */ + /* 0x50000-0x5ffff garbage? */ + + /* 0x60000-0x6ffff blank */ + /* 0x70000-0x7ffff garbage? */ + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "427a16.9r", 0x000000, 2*1024*1024, CRC(39547265) SHA1(c0efd68c0c1ea59141045150842f36d43e1f01d8) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "soccerss.nv", 0x0000, 0x080, CRC(f222dae4) SHA1(fede48a4e1fe91cf2b17ff3f3996bca4816fc283) ) +ROM_END + +/* Soccer Superstars (94.12.19 - U.S.A. ver UAC) Writes UAA to EEPROM and reports as UAA despite chip labels UAC */ +ROM_START( soccerssu ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "427uac02.28m", 0x200000, 512*1024, CRC(cd999967) SHA1(6731b8f15ec73148993e3bce251f2392590da162) ) + ROM_LOAD32_WORD_SWAP( "427uac03.30m", 0x200002, 512*1024, CRC(2edd4d49) SHA1(4118908dd84ebff2571cd7e4ce72951120ee82a9) ) + + /* data roms */ + ROM_LOAD32_WORD_SWAP( "427a04.28r", 0x400000, 0x080000, CRC(c7d3e1a2) SHA1(5e1e4f4c97def36902ad853248014a7af62e0c5e) ) + ROM_LOAD32_WORD_SWAP( "427a05.30r", 0x400002, 0x080000, CRC(5372f0a5) SHA1(36e8d0a73918cbd018c1865d1a05445daba8997c) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("427a07.6m", 0x000000, 128*1024, CRC(8dbaf4c7) SHA1(cb69bf94090a4871b35e7ba1f58e3225077b82cd) ) + ROM_LOAD16_BYTE("427a06.9m", 0x000001, 128*1024, CRC(979df65d) SHA1(7499e9a27aa562692bd3a296789696492a6254bc) ) + + /* tiles */ + ROM_REGION( 0x500000, "k056832", ROMREGION_ERASE00 ) + TILE_WORDS2_ROM_LOAD( "427a15.11r", 0x000000, 0x100000, CRC(33ce2b8e) SHA1(b0936386cdc7c41f33b1d7b4f5ce25fe618d1286) ) + TILE_BYTES2_ROM_LOAD( "427a14.143", 0x000004, 0x080000, CRC(7575a0ed) SHA1(92fda2747ac090f93e60cff8478af6721b949dc2) ) + + /* sprites */ + ROM_REGION( 0xc00000, "k055673", ROMREGION_ERASE00 ) + _48_WORD_ROM_LOAD( "427a13.18r", 0x000000, 2*1024*1024, CRC(815a9b87) SHA1(7d9d5932fff7dd7aa4cbccf0c8d3784dc8042e70) ) + _48_WORD_ROM_LOAD( "427a11.23r", 0x000002, 2*1024*1024, CRC(c1ca74c1) SHA1(b7286df8e59f8f1939ebf17aaf9345a857b0b100) ) + _48_WORD_ROM_LOAD( "427a09.137", 0x000004, 2*1024*1024, CRC(56bdd480) SHA1(01d164aedc77f71f6310cfd739c00b33289a2e7e) ) + _48_WORD_ROM_LOAD( "427a12.21r", 0x600000, 2*1024*1024, CRC(97d6fd38) SHA1(8d2895850cafdea95db08c84e7eeea90a1921515) ) + _48_WORD_ROM_LOAD( "427a10.25r", 0x600002, 2*1024*1024, CRC(6b3ccb41) SHA1(b246ef350a430e60f0afd1b80ff48139c325e926) ) + _48_WORD_ROM_LOAD( "427a08.140", 0x600004, 2*1024*1024, CRC(221250af) SHA1(fd24e7f0e3024df5aa08506523953c5e35d2267b) ) + + /* PSAC2 tiles */ + ROM_REGION( 0x100000, "gfx3", ROMREGION_ERASE00 ) + ROM_LOAD( "427a18.145", 0x000000, 0x100000, CRC(bb6e6ec6) SHA1(aa1365a4318866d9e7e74461a6e6c113f83b6771) ) + + /* PSAC2 map data */ + ROM_REGION( 0x080000, "gfx4", ROMREGION_ERASE00 ) + // 4 banks of 0x20000? (only the first 2 seem valid tho) + // maybe this is CPU addressable and the 'garbage' is sprite related? + ROM_LOAD( "427a17.24c", 0x000000, 0x080000, CRC(fb6eb01f) SHA1(28cdb30ff70ee5fc7624e18fe048dd85dfa49ace) ) + /* 0x00000-0x1ffff pitch+crowd */ + + /* 0x20000-0x2ffff attract screens */ + /* 0x30000-0x3ffff garbage? */ + + /* 0x40000-0x4ffff blank */ + /* 0x50000-0x5ffff garbage? */ + + /* 0x60000-0x6ffff blank */ + /* 0x70000-0x7ffff garbage? */ + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "427a16.9r", 0x000000, 2*1024*1024, CRC(39547265) SHA1(c0efd68c0c1ea59141045150842f36d43e1f01d8) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "soccerssu.nv", 0x0000, 0x080, CRC(812f6878) SHA1(fc4975211720a7eb413bceda8109231cb1c00834) ) +ROM_END + +/* Soccer Superstars (94.12.19 - Japan ver JAC) Writes JAB to EEPROM and reports as JAC */ +ROM_START( soccerssj ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "427jac02.28m", 0x200000, 512*1024, CRC(399fe89d) SHA1(e42cf87cff8cd421afd121621ba1f67c43f728ef) ) + ROM_LOAD32_WORD_SWAP( "427jac03.30m", 0x200002, 512*1024, CRC(f9c6ab08) SHA1(371b05a3990436a16b77b3d58aa235202abe78db) ) + + /* data roms */ + ROM_LOAD32_WORD_SWAP( "427a04.28r", 0x400000, 0x080000, CRC(c7d3e1a2) SHA1(5e1e4f4c97def36902ad853248014a7af62e0c5e) ) + ROM_LOAD32_WORD_SWAP( "427a05.30r", 0x400002, 0x080000, CRC(5372f0a5) SHA1(36e8d0a73918cbd018c1865d1a05445daba8997c) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("427a07.6m", 0x000000, 128*1024, CRC(8dbaf4c7) SHA1(cb69bf94090a4871b35e7ba1f58e3225077b82cd) ) + ROM_LOAD16_BYTE("427a06.9m", 0x000001, 128*1024, CRC(979df65d) SHA1(7499e9a27aa562692bd3a296789696492a6254bc) ) + + /* tiles */ + ROM_REGION( 0x500000, "k056832", ROMREGION_ERASE00 ) + TILE_WORDS2_ROM_LOAD( "427a15.11r", 0x000000, 0x100000, CRC(33ce2b8e) SHA1(b0936386cdc7c41f33b1d7b4f5ce25fe618d1286) ) + TILE_BYTES2_ROM_LOAD( "427a14.143", 0x000004, 0x080000, CRC(7575a0ed) SHA1(92fda2747ac090f93e60cff8478af6721b949dc2) ) + + /* sprites */ + ROM_REGION( 0xc00000, "k055673", ROMREGION_ERASE00 ) + _48_WORD_ROM_LOAD( "427a13.18r", 0x000000, 2*1024*1024, CRC(815a9b87) SHA1(7d9d5932fff7dd7aa4cbccf0c8d3784dc8042e70) ) + _48_WORD_ROM_LOAD( "427a11.23r", 0x000002, 2*1024*1024, CRC(c1ca74c1) SHA1(b7286df8e59f8f1939ebf17aaf9345a857b0b100) ) + _48_WORD_ROM_LOAD( "427a09.137", 0x000004, 2*1024*1024, CRC(56bdd480) SHA1(01d164aedc77f71f6310cfd739c00b33289a2e7e) ) + _48_WORD_ROM_LOAD( "427a12.21r", 0x600000, 2*1024*1024, CRC(97d6fd38) SHA1(8d2895850cafdea95db08c84e7eeea90a1921515) ) + _48_WORD_ROM_LOAD( "427a10.25r", 0x600002, 2*1024*1024, CRC(6b3ccb41) SHA1(b246ef350a430e60f0afd1b80ff48139c325e926) ) + _48_WORD_ROM_LOAD( "427a08.140", 0x600004, 2*1024*1024, CRC(221250af) SHA1(fd24e7f0e3024df5aa08506523953c5e35d2267b) ) + + /* PSAC2 tiles */ + ROM_REGION( 0x100000, "gfx3", ROMREGION_ERASE00 ) + ROM_LOAD( "427a18.145", 0x000000, 0x100000, CRC(bb6e6ec6) SHA1(aa1365a4318866d9e7e74461a6e6c113f83b6771) ) + + /* PSAC2 map data */ + ROM_REGION( 0x080000, "gfx4", ROMREGION_ERASE00 ) + ROM_LOAD( "427a17.24c", 0x000000, 0x080000, CRC(fb6eb01f) SHA1(28cdb30ff70ee5fc7624e18fe048dd85dfa49ace) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "427a16.9r", 0x000000, 2*1024*1024, CRC(39547265) SHA1(c0efd68c0c1ea59141045150842f36d43e1f01d8) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "soccerssj.nv", 0x0000, 0x080, CRC(7440255e) SHA1(af379b5b1f765f9050f18fbd41c5031c5ad4918b) ) +ROM_END + +/* Soccer Superstars (94.12.3 - Japan ver JAA) Writes JAA to EEPROM and reports as JAA */ +ROM_START( soccerssja ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "427jaa02.28m", 0x200000, 512*1024, CRC(210f9ba7) SHA1(766fc821d1c7aaf9e306c6e2379d85e7aa50738c) ) + ROM_LOAD32_WORD_SWAP( "427jaa03.30m", 0x200002, 512*1024, CRC(f76add04) SHA1(755dff41ce3b0488ed8f9f5feebfe95a22b70d16) ) + + /* data roms */ + ROM_LOAD32_WORD_SWAP( "427a04.28r", 0x400000, 0x080000, CRC(c7d3e1a2) SHA1(5e1e4f4c97def36902ad853248014a7af62e0c5e) ) + ROM_LOAD32_WORD_SWAP( "427a05.30r", 0x400002, 0x080000, CRC(5372f0a5) SHA1(36e8d0a73918cbd018c1865d1a05445daba8997c) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("427a07.6m", 0x000000, 128*1024, CRC(8dbaf4c7) SHA1(cb69bf94090a4871b35e7ba1f58e3225077b82cd) ) + ROM_LOAD16_BYTE("427a06.9m", 0x000001, 128*1024, CRC(979df65d) SHA1(7499e9a27aa562692bd3a296789696492a6254bc) ) + + /* tiles */ + ROM_REGION( 0x500000, "k056832", ROMREGION_ERASE00 ) + TILE_WORDS2_ROM_LOAD( "427a15.11r", 0x000000, 0x100000, CRC(33ce2b8e) SHA1(b0936386cdc7c41f33b1d7b4f5ce25fe618d1286) ) + TILE_BYTES2_ROM_LOAD( "427a14.143", 0x000004, 0x080000, CRC(7575a0ed) SHA1(92fda2747ac090f93e60cff8478af6721b949dc2) ) + + /* sprites */ + ROM_REGION( 0xc00000, "k055673", ROMREGION_ERASE00 ) + _48_WORD_ROM_LOAD( "427a13.18r", 0x000000, 2*1024*1024, CRC(815a9b87) SHA1(7d9d5932fff7dd7aa4cbccf0c8d3784dc8042e70) ) + _48_WORD_ROM_LOAD( "427a11.23r", 0x000002, 2*1024*1024, CRC(c1ca74c1) SHA1(b7286df8e59f8f1939ebf17aaf9345a857b0b100) ) + _48_WORD_ROM_LOAD( "427a09.137", 0x000004, 2*1024*1024, CRC(56bdd480) SHA1(01d164aedc77f71f6310cfd739c00b33289a2e7e) ) + _48_WORD_ROM_LOAD( "427a12.21r", 0x600000, 2*1024*1024, CRC(97d6fd38) SHA1(8d2895850cafdea95db08c84e7eeea90a1921515) ) + _48_WORD_ROM_LOAD( "427a10.25r", 0x600002, 2*1024*1024, CRC(6b3ccb41) SHA1(b246ef350a430e60f0afd1b80ff48139c325e926) ) + _48_WORD_ROM_LOAD( "427a08.140", 0x600004, 2*1024*1024, CRC(221250af) SHA1(fd24e7f0e3024df5aa08506523953c5e35d2267b) ) + + /* PSAC2 tiles */ + ROM_REGION( 0x100000, "gfx3", ROMREGION_ERASE00 ) + ROM_LOAD( "427a18.145", 0x000000, 0x100000, CRC(bb6e6ec6) SHA1(aa1365a4318866d9e7e74461a6e6c113f83b6771) ) + + /* PSAC2 map data */ + ROM_REGION( 0x080000, "gfx4", ROMREGION_ERASE00 ) + ROM_LOAD( "427a17.24c", 0x000000, 0x080000, CRC(fb6eb01f) SHA1(28cdb30ff70ee5fc7624e18fe048dd85dfa49ace) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "427a16.9r", 0x000000, 2*1024*1024, CRC(39547265) SHA1(c0efd68c0c1ea59141045150842f36d43e1f01d8) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "soccerssja.nv", 0x0000, 0x080, CRC(60dba700) SHA1(087b086b29748727b41fdd4c154ff9b4bef42959) ) +ROM_END + +/* Soccer Superstars (94.12.19 - Asia ver AAA) Writes AAA to EEPROM and reports as AAA */ +ROM_START( soccerssa ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "427aaa02.28m", 0x200000, 512*1024, CRC(a001d4bf) SHA1(424d6ee1fed8c0278bf87e989f88a90b34387068) ) + ROM_LOAD32_WORD_SWAP( "427aaa03.30m", 0x200002, 512*1024, CRC(83d37f48) SHA1(c96e564ec39d74c9f4447d7f339d7861a7cead14) ) + + /* data roms */ + ROM_LOAD32_WORD_SWAP( "427a04.28r", 0x400000, 0x080000, CRC(c7d3e1a2) SHA1(5e1e4f4c97def36902ad853248014a7af62e0c5e) ) + ROM_LOAD32_WORD_SWAP( "427a05.30r", 0x400002, 0x080000, CRC(5372f0a5) SHA1(36e8d0a73918cbd018c1865d1a05445daba8997c) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("427a07.6m", 0x000000, 128*1024, CRC(8dbaf4c7) SHA1(cb69bf94090a4871b35e7ba1f58e3225077b82cd) ) + ROM_LOAD16_BYTE("427a06.9m", 0x000001, 128*1024, CRC(979df65d) SHA1(7499e9a27aa562692bd3a296789696492a6254bc) ) + + /* tiles */ + ROM_REGION( 0x500000, "k056832", ROMREGION_ERASE00 ) + TILE_WORDS2_ROM_LOAD( "427a15.11r", 0x000000, 0x100000, CRC(33ce2b8e) SHA1(b0936386cdc7c41f33b1d7b4f5ce25fe618d1286) ) + TILE_BYTES2_ROM_LOAD( "427a14.143", 0x000004, 0x080000, CRC(7575a0ed) SHA1(92fda2747ac090f93e60cff8478af6721b949dc2) ) + + /* sprites */ + ROM_REGION( 0xc00000, "k055673", ROMREGION_ERASE00 ) + _48_WORD_ROM_LOAD( "427a13.18r", 0x000000, 2*1024*1024, CRC(815a9b87) SHA1(7d9d5932fff7dd7aa4cbccf0c8d3784dc8042e70) ) + _48_WORD_ROM_LOAD( "427a11.23r", 0x000002, 2*1024*1024, CRC(c1ca74c1) SHA1(b7286df8e59f8f1939ebf17aaf9345a857b0b100) ) + _48_WORD_ROM_LOAD( "427a09.137", 0x000004, 2*1024*1024, CRC(56bdd480) SHA1(01d164aedc77f71f6310cfd739c00b33289a2e7e) ) + _48_WORD_ROM_LOAD( "427a12.21r", 0x600000, 2*1024*1024, CRC(97d6fd38) SHA1(8d2895850cafdea95db08c84e7eeea90a1921515) ) + _48_WORD_ROM_LOAD( "427a10.25r", 0x600002, 2*1024*1024, CRC(6b3ccb41) SHA1(b246ef350a430e60f0afd1b80ff48139c325e926) ) + _48_WORD_ROM_LOAD( "427a08.140", 0x600004, 2*1024*1024, CRC(221250af) SHA1(fd24e7f0e3024df5aa08506523953c5e35d2267b) ) + + /* PSAC2 tiles */ + ROM_REGION( 0x100000, "gfx3", ROMREGION_ERASE00 ) + ROM_LOAD( "427a18.145", 0x000000, 0x100000, CRC(bb6e6ec6) SHA1(aa1365a4318866d9e7e74461a6e6c113f83b6771) ) + + /* PSAC2 map data */ + ROM_REGION( 0x080000, "gfx4", ROMREGION_ERASE00 ) + ROM_LOAD( "427a17.24c", 0x000000, 0x080000, CRC(fb6eb01f) SHA1(28cdb30ff70ee5fc7624e18fe048dd85dfa49ace) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "427a16.9r", 0x000000, 2*1024*1024, CRC(39547265) SHA1(c0efd68c0c1ea59141045150842f36d43e1f01d8) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "soccerssa.nv", 0x0000, 0x080, CRC(e3a3f3d5) SHA1(374cf5bbcc459c56ebbba5068406f6d767bcb608) ) +ROM_END + +/* Vs. Net Soccer TODO: Hook up ROM tests. */ + +/* Vs. Net Soccer (ver EAD) */ +ROM_START( vsnetscr ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "627ead03.29m", 0x200000, 0x080000, CRC(2da707e2) SHA1(3273c671e417abc4e82cd0d4f5d01dd4c9c432f9) ) + ROM_LOAD32_WORD_SWAP( "627ead02.31m", 0x200002, 0x080000, CRC(01ab336a) SHA1(6e7ab03a82548cc5bd17938df0baf47381dd86aa) ) + + ROM_LOAD32_WORD_SWAP( "627a05.29r", 0x400000, 1024*1024, CRC(be4e7b3c) SHA1(f44e7b1913aa54f759bd31bb86fdedbb9747b2d5) ) + ROM_LOAD32_WORD_SWAP( "627a04.31r", 0x400002, 1024*1024, CRC(17334e9a) SHA1(82cdba016c29160550c43feee7a4feff6e1184aa) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("627b06.9m", 0x000000, 128*1024, CRC(c8337b9d) SHA1(574c674676f493ca4b5a135728ce01e664d1293d) ) + ROM_LOAD16_BYTE("627b07.7m", 0x000001, 128*1024, CRC(d7d92579) SHA1(929b8e90cfef2ef14d84173267b637e4efdb6867) ) + + /* tiles */ + ROM_REGION( 0x500000, "k056832", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "627a21.11r", 0x000000, 1024*1024, CRC(d0755fb8) SHA1(de37ea2a7969a97b6f2abccb7dc2a58950482bf0) ) + ROM_LOAD16_BYTE( "627a20.11m", 0x000001, 1024*1024, CRC(f68b28f2) SHA1(1463717ed581494fcab77a80dc6ffd3ab82ab1fa) ) + + ROM_REGION( 0x1800000, "k055673", ROMREGION_ERASEFF ) + _48_WORD_ROM_LOAD( "627a19.14r", 0x0000000, 4*1024*1024, CRC(39989087) SHA1(9a1da422cc71c2e9512361511b8482a33ada6396) ) + _48_WORD_ROM_LOAD( "627a15.18r", 0x0000002, 4*1024*1024, CRC(94c557e9) SHA1(3eb2b47d4143b1caeaaf529b5843d6cb0b517eb2) ) + _48_WORD_ROM_LOAD( "627a11.23r", 0x0000004, 4*1024*1024, CRC(8185b19f) SHA1(4a8cc3613e743b2de786663f4f7097e7236a8b74) ) + _48_WORD_ROM_LOAD( "627a17.16r", 0x0c00000, 4*1024*1024, CRC(5c79a0a5) SHA1(a96740d9c5901f2533415985fc83a05c6b562727) ) + _48_WORD_ROM_LOAD( "627a13.21r", 0x0c00002, 4*1024*1024, CRC(934c758b) SHA1(f33f0c337038e50386ea2dbaa0e0b1480c413720) ) + _48_WORD_ROM_LOAD( "627a09.25r", 0x0c00004, 4*1024*1024, CRC(980b0f87) SHA1(137cc79d75881ddbabb90f0a1622bda9caf475ca) ) + + /* PSAC2 tiles */ + ROM_REGION( 0x200000, "gfx3", ROMREGION_ERASE00) + ROM_LOAD( "627a24.22h", 0x000000, 0x200000, CRC(2cd73305) SHA1(5a46148c08198499639adc4b6936af0b2b530bc9) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "627a23.7r", 0x000000, 0x400000, CRC(d70c59dd) SHA1(c33caca20611202fb489d9416083f41754b1d6e1) ) +ROM_END + +/* Vs. Net Soccer (ver EAB) */ +ROM_START( vsnetscreb ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "627eab03.29m", 0x200000, 0x080000, CRC(878b2369) SHA1(c92783ef1eb33c0596a9354e97f30f8c017e842c) ) + ROM_LOAD32_WORD_SWAP( "627eab02.31m", 0x200002, 0x080000, CRC(cc76bce8) SHA1(54a4047412a98a5c4f64a8bc2fd3cda9c07e58b3) ) + + ROM_LOAD32_WORD_SWAP( "627a05.29r", 0x400000, 1024*1024, CRC(be4e7b3c) SHA1(f44e7b1913aa54f759bd31bb86fdedbb9747b2d5) ) + ROM_LOAD32_WORD_SWAP( "627a04.31r", 0x400002, 1024*1024, CRC(17334e9a) SHA1(82cdba016c29160550c43feee7a4feff6e1184aa) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("627b06.9m", 0x000000, 128*1024, CRC(c8337b9d) SHA1(574c674676f493ca4b5a135728ce01e664d1293d) ) + ROM_LOAD16_BYTE("627b07.7m", 0x000001, 128*1024, CRC(d7d92579) SHA1(929b8e90cfef2ef14d84173267b637e4efdb6867) ) + + /* tiles */ + ROM_REGION( 0x500000, "k056832", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "627a21.11r", 0x000000, 1024*1024, CRC(d0755fb8) SHA1(de37ea2a7969a97b6f2abccb7dc2a58950482bf0) ) + ROM_LOAD16_BYTE( "627a20.11m", 0x000001, 1024*1024, CRC(f68b28f2) SHA1(1463717ed581494fcab77a80dc6ffd3ab82ab1fa) ) + + ROM_REGION( 0x1800000, "k055673", ROMREGION_ERASEFF ) + _48_WORD_ROM_LOAD( "627a19.14r", 0x0000000, 4*1024*1024, CRC(39989087) SHA1(9a1da422cc71c2e9512361511b8482a33ada6396) ) + _48_WORD_ROM_LOAD( "627a15.18r", 0x0000002, 4*1024*1024, CRC(94c557e9) SHA1(3eb2b47d4143b1caeaaf529b5843d6cb0b517eb2) ) + _48_WORD_ROM_LOAD( "627a11.23r", 0x0000004, 4*1024*1024, CRC(8185b19f) SHA1(4a8cc3613e743b2de786663f4f7097e7236a8b74) ) + _48_WORD_ROM_LOAD( "627a17.16r", 0x0c00000, 4*1024*1024, CRC(5c79a0a5) SHA1(a96740d9c5901f2533415985fc83a05c6b562727) ) + _48_WORD_ROM_LOAD( "627a13.21r", 0x0c00002, 4*1024*1024, CRC(934c758b) SHA1(f33f0c337038e50386ea2dbaa0e0b1480c413720) ) + _48_WORD_ROM_LOAD( "627a09.25r", 0x0c00004, 4*1024*1024, CRC(980b0f87) SHA1(137cc79d75881ddbabb90f0a1622bda9caf475ca) ) + + /* PSAC2 tiles */ + ROM_REGION( 0x200000, "gfx3", ROMREGION_ERASE00) + ROM_LOAD( "627a24.22h", 0x000000, 0x200000, CRC(2cd73305) SHA1(5a46148c08198499639adc4b6936af0b2b530bc9) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "627a23.7r", 0x000000, 0x400000, CRC(d70c59dd) SHA1(c33caca20611202fb489d9416083f41754b1d6e1) ) +ROM_END + +/* Vs. Net Soccer (ver UAB) */ +ROM_START( vsnetscru ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "627uab03.29m", 0x200000, 512*1024, CRC(53ca7eec) SHA1(d2d5a491417849c31aaff61a93da4ab2e94495d4) ) + ROM_LOAD32_WORD_SWAP( "627uab02.31m", 0x200002, 512*1024, CRC(c352cc6f) SHA1(d8d0d802eb6bd0910e35dcc6b81b7ac9036e32ea) ) + + ROM_LOAD32_WORD_SWAP( "627a05.29r", 0x400000, 1024*1024, CRC(be4e7b3c) SHA1(f44e7b1913aa54f759bd31bb86fdedbb9747b2d5) ) + ROM_LOAD32_WORD_SWAP( "627a04.31r", 0x400002, 1024*1024, CRC(17334e9a) SHA1(82cdba016c29160550c43feee7a4feff6e1184aa) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("627b06.9m", 0x000000, 128*1024, CRC(c8337b9d) SHA1(574c674676f493ca4b5a135728ce01e664d1293d) ) + ROM_LOAD16_BYTE("627b07.7m", 0x000001, 128*1024, CRC(d7d92579) SHA1(929b8e90cfef2ef14d84173267b637e4efdb6867) ) + + /* tiles */ + ROM_REGION( 0x500000, "k056832", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "627a21.11r", 0x000000, 1024*1024, CRC(d0755fb8) SHA1(de37ea2a7969a97b6f2abccb7dc2a58950482bf0) ) + ROM_LOAD16_BYTE( "627a20.11m", 0x000001, 1024*1024, CRC(f68b28f2) SHA1(1463717ed581494fcab77a80dc6ffd3ab82ab1fa) ) + + ROM_REGION( 0x1800000, "k055673", ROMREGION_ERASEFF ) + _48_WORD_ROM_LOAD( "627a19.14r", 0x0000000, 4*1024*1024, CRC(39989087) SHA1(9a1da422cc71c2e9512361511b8482a33ada6396) ) + _48_WORD_ROM_LOAD( "627a15.18r", 0x0000002, 4*1024*1024, CRC(94c557e9) SHA1(3eb2b47d4143b1caeaaf529b5843d6cb0b517eb2) ) + _48_WORD_ROM_LOAD( "627a11.23r", 0x0000004, 4*1024*1024, CRC(8185b19f) SHA1(4a8cc3613e743b2de786663f4f7097e7236a8b74) ) + _48_WORD_ROM_LOAD( "627a17.16r", 0x0c00000, 4*1024*1024, CRC(5c79a0a5) SHA1(a96740d9c5901f2533415985fc83a05c6b562727) ) + _48_WORD_ROM_LOAD( "627a13.21r", 0x0c00002, 4*1024*1024, CRC(934c758b) SHA1(f33f0c337038e50386ea2dbaa0e0b1480c413720) ) + _48_WORD_ROM_LOAD( "627a09.25r", 0x0c00004, 4*1024*1024, CRC(980b0f87) SHA1(137cc79d75881ddbabb90f0a1622bda9caf475ca) ) + + /* PSAC2 tiles */ + ROM_REGION( 0x200000, "gfx3", ROMREGION_ERASE00) + ROM_LOAD( "627a24.22h", 0x000000, 0x200000, CRC(2cd73305) SHA1(5a46148c08198499639adc4b6936af0b2b530bc9) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "627a23.7r", 0x000000, 0x400000, CRC(d70c59dd) SHA1(c33caca20611202fb489d9416083f41754b1d6e1) ) +ROM_END + + +/* +Versus Net Soccer (Version JAB) +Konami, 1996 + +This game runs on Konami GX hardware. + +PCB Layouts +----------- + +Main Board + +SYSTEM GX MOTHER PCB +PWB300456A +|----------------------------------------------| +|056602 058232 | +| 514256 514256 8464 68EC000 | +| TMS57002 056800 058141| +|S_OUT PAL1 8464 | +| CY7C185 | +| CY7C185 CY7C185 PAL2 | +| 058144 62256 056832| +|J 48MHz 058143 | +| 056820 18.432MHz 62256 | +|A 056766 32MHz | +| 93C46 62256 055555| +|M 056879 68EC020 | +| 056879 | +|M | +| 8464 | +|A 62256 62256 058142| +| 62256 62256 8464 | +|CN5 | +| TEST_SW | +| 300A01.34K | +|CN6 055673| +|DIPSW CN3 CN4 | +|----------------------------------------------| +Notes: + This version mother board has the game board connectors on top, + meaning the game board plugs in above the mother board. A small + cable feeds the RGB from the game board to the JAMMA connector via + an adapter board for the 1st screen. Another small cable is used + to connect the 2nd RGB output to the 'versus' cabinet/monitor. + + 68020 clock: 24.000MHz (QFP100) + 68000 clock: 8.000MHz (PLCC68) + VSync : 60Hz + + S_OUT: Connector for right speaker sound output. + CN3 : Connector for 3rd player controls + CN4 : Connector for 4th player controls + CN5 : Connector for player 1 gun + CN6 : Connector for player 2 gun + + RAM: + CY7C185: 8K x8 SRAM + 8464 : 8K x8 SRAM + 62256 : 32K x8 SRAM + 514256 : 256K x4 DRAM + + Konami Customs: + 056602 - custom ceramic package near AMP, SIP38) + 058232 - custom SIP14 + 056820 - custom SIP13 + 058144 - QFP160 + 056766 - QFP64 + 056879 (x2) - QFP120 + 058143 - QFP160 + 058142 - QFP120 + 058141 - QFP120 + 056832 - TQFP144 + 055555 - TQFP176 + 055673 - TQFP176 + + +Game Board (This sits on top of the Mother PCB) + +SYSTEM GX SUB PCB TYPE 4 +PWB 301798A + |-----------------------------------------| + | MC44200 814260 | + |RGB2_OUT 814260 | + | 058146 627B07.7M 627A23.7R | + | CY7C185 | + | CY7C185 627B06.9M *9R | +|----| CY7C185 PAL1 | +|RGB1_OUT CY7C185 627A20.11M 627A21.11R | +| MC44200 CY7C185 | +| PAL2 *14M 627A19.14R | +| PAL3 | +| PAL4 *16M 627A17.16R | +| | +|84256 *18M 627A15.18R | +|84256 627A24.22H | +| *21M 627A13.21R | +| | +| 053936 *23M 627A11.23R | +| PAL5 | +| 8464 8464 *25M 627A09.25R | +| | +| 003462 627JAB03.29M 627A05.29R | +| 627JAB02.31M 627A04.31R | +|----------------------------------------------| +Notes: + *: Unpopulated ROM positions. + + Konami Customs: + 003462 - Xilinx PLCC84 FPGA stamped 003462 + 053936 - QFP80, also marked KS10011-PF PSAC2 + 058146 - TQFP176 + + RAM: + 814260 : 256K x16 DRAM + 84256 : 32K x8 SRAM + 8464 : 8K x8 SRAM + CY7C185: 8K x8 SRAM + + PALs: + PAL1: PALCE16V8 stamped 002207 + PAL2: PALCE16V8 stamped 000141 + PAL3: PALCE16V8 stamped 002205 + PAL4: PALCE16V8 stamped 002206 + PAL5: PALCE16V8 stamped 000143 +*/ + +/* Vs. Net Soccer (ver JAB) */ +ROM_START( vsnetscrj ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "627jab03.29m", 0x200000, 512*1024, CRC(68c4bb17) SHA1(db109998221d0cc41d3fd5c9339773c7077edbf4) ) + ROM_LOAD32_WORD_SWAP( "627jab02.31m", 0x200002, 512*1024, CRC(f10929d7) SHA1(304001d44ed762682a4606a849305a9352e9bec3) ) + + ROM_LOAD32_WORD_SWAP( "627a05.29r", 0x400000, 1024*1024, CRC(be4e7b3c) SHA1(f44e7b1913aa54f759bd31bb86fdedbb9747b2d5) ) + ROM_LOAD32_WORD_SWAP( "627a04.31r", 0x400002, 1024*1024, CRC(17334e9a) SHA1(82cdba016c29160550c43feee7a4feff6e1184aa) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("627b06.9m", 0x000000, 128*1024, CRC(c8337b9d) SHA1(574c674676f493ca4b5a135728ce01e664d1293d) ) + ROM_LOAD16_BYTE("627b07.7m", 0x000001, 128*1024, CRC(d7d92579) SHA1(929b8e90cfef2ef14d84173267b637e4efdb6867) ) + + /* tiles */ + ROM_REGION( 0x500000, "k056832", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "627a21.11r", 0x000000, 1024*1024, CRC(d0755fb8) SHA1(de37ea2a7969a97b6f2abccb7dc2a58950482bf0) ) + ROM_LOAD16_BYTE( "627a20.11m", 0x000001, 1024*1024, CRC(f68b28f2) SHA1(1463717ed581494fcab77a80dc6ffd3ab82ab1fa) ) + + ROM_REGION( 0x1800000, "k055673", ROMREGION_ERASEFF ) + _48_WORD_ROM_LOAD( "627a19.14r", 0x0000000, 4*1024*1024, CRC(39989087) SHA1(9a1da422cc71c2e9512361511b8482a33ada6396) ) + _48_WORD_ROM_LOAD( "627a15.18r", 0x0000002, 4*1024*1024, CRC(94c557e9) SHA1(3eb2b47d4143b1caeaaf529b5843d6cb0b517eb2) ) + _48_WORD_ROM_LOAD( "627a11.23r", 0x0000004, 4*1024*1024, CRC(8185b19f) SHA1(4a8cc3613e743b2de786663f4f7097e7236a8b74) ) + _48_WORD_ROM_LOAD( "627a17.16r", 0x0c00000, 4*1024*1024, CRC(5c79a0a5) SHA1(a96740d9c5901f2533415985fc83a05c6b562727) ) + _48_WORD_ROM_LOAD( "627a13.21r", 0x0c00002, 4*1024*1024, CRC(934c758b) SHA1(f33f0c337038e50386ea2dbaa0e0b1480c413720) ) + _48_WORD_ROM_LOAD( "627a09.25r", 0x0c00004, 4*1024*1024, CRC(980b0f87) SHA1(137cc79d75881ddbabb90f0a1622bda9caf475ca) ) + + /* PSAC2 tiles */ + ROM_REGION( 0x200000, "gfx3", ROMREGION_ERASE00) + ROM_LOAD( "627a24.22h", 0x000000, 0x200000, CRC(2cd73305) SHA1(5a46148c08198499639adc4b6936af0b2b530bc9) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "627a23.7r", 0x000000, 0x400000, CRC(d70c59dd) SHA1(c33caca20611202fb489d9416083f41754b1d6e1) ) +ROM_END + +/* Vs. Net Soccer (ver AAA) */ +ROM_START( vsnetscra ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "627aaa03.29m", 0x200000, 0x080000, CRC(50e23a50) SHA1(82cf1b051cfb2f94567c5a4199802960798c1152) ) + ROM_LOAD32_WORD_SWAP( "627aaa02.31m", 0x200002, 0x080000, CRC(e3d21afe) SHA1(28c213106087da425f85bb7f3398aca98964ea38) ) + + ROM_LOAD32_WORD_SWAP( "627a05.29r", 0x400000, 1024*1024, CRC(be4e7b3c) SHA1(f44e7b1913aa54f759bd31bb86fdedbb9747b2d5) ) + ROM_LOAD32_WORD_SWAP( "627a04.31r", 0x400002, 1024*1024, CRC(17334e9a) SHA1(82cdba016c29160550c43feee7a4feff6e1184aa) ) + + /* sound program - this is version AAA, should it really be using B revision sound program? */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("627b06.9m", 0x000000, 128*1024, CRC(c8337b9d) SHA1(574c674676f493ca4b5a135728ce01e664d1293d) ) + ROM_LOAD16_BYTE("627b07.7m", 0x000001, 128*1024, CRC(d7d92579) SHA1(929b8e90cfef2ef14d84173267b637e4efdb6867) ) + + /* tiles */ + ROM_REGION( 0x500000, "k056832", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "627a21.11r", 0x000000, 1024*1024, CRC(d0755fb8) SHA1(de37ea2a7969a97b6f2abccb7dc2a58950482bf0) ) + ROM_LOAD16_BYTE( "627a20.11m", 0x000001, 1024*1024, CRC(f68b28f2) SHA1(1463717ed581494fcab77a80dc6ffd3ab82ab1fa) ) + + ROM_REGION( 0x1800000, "k055673", ROMREGION_ERASEFF ) + _48_WORD_ROM_LOAD( "627a19.14r", 0x0000000, 4*1024*1024, CRC(39989087) SHA1(9a1da422cc71c2e9512361511b8482a33ada6396) ) + _48_WORD_ROM_LOAD( "627a15.18r", 0x0000002, 4*1024*1024, CRC(94c557e9) SHA1(3eb2b47d4143b1caeaaf529b5843d6cb0b517eb2) ) + _48_WORD_ROM_LOAD( "627a11.23r", 0x0000004, 4*1024*1024, CRC(8185b19f) SHA1(4a8cc3613e743b2de786663f4f7097e7236a8b74) ) + _48_WORD_ROM_LOAD( "627a17.16r", 0x0c00000, 4*1024*1024, CRC(5c79a0a5) SHA1(a96740d9c5901f2533415985fc83a05c6b562727) ) + _48_WORD_ROM_LOAD( "627a13.21r", 0x0c00002, 4*1024*1024, CRC(934c758b) SHA1(f33f0c337038e50386ea2dbaa0e0b1480c413720) ) + _48_WORD_ROM_LOAD( "627a09.25r", 0x0c00004, 4*1024*1024, CRC(980b0f87) SHA1(137cc79d75881ddbabb90f0a1622bda9caf475ca) ) + + /* PSAC2 tiles */ + ROM_REGION( 0x200000, "gfx3", ROMREGION_ERASE00) + ROM_LOAD( "627a24.22h", 0x000000, 0x200000, CRC(2cd73305) SHA1(5a46148c08198499639adc4b6936af0b2b530bc9) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "627a23.7r", 0x000000, 0x400000, CRC(d70c59dd) SHA1(c33caca20611202fb489d9416083f41754b1d6e1) ) +ROM_END + +/* Lethal Enforcers II */ +ROM_START( le2 ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_BYTE( "312eaa05.26b", 0x200000, 128*1024, CRC(875f6561) SHA1(8ede0697ff91134011f9fb5eb26e596cbc6e8f12) ) + ROM_LOAD32_BYTE( "312eaa04.28b", 0x200001, 128*1024, CRC(d5fb8d30) SHA1(824d6a43bed5aff2f65096922620ff5bff3b29f9) ) + ROM_LOAD32_BYTE( "312eaa03.30b", 0x200002, 128*1024, CRC(cfe07036) SHA1(cd7181ace76feb0e684a51db488b64b86ced5f55) ) + ROM_LOAD32_BYTE( "312eaa02.33b", 0x200003, 128*1024, CRC(5094b965) SHA1(cb597b663c49d0f63af770fd6ce344e5df9a1ed9) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("312b06.9c", 0x000000, 128*1024, CRC(a6f62539) SHA1(b333e02c55237a0429d8c5386ec68b67797a1107) ) + ROM_LOAD16_BYTE("312b07.7c", 0x000001, 128*1024, CRC(1aa19c41) SHA1(5b879fb17ac514f266e63db6af50f2f4af7da32c) ) + + /* tiles */ + ROM_REGION( 0x800000, "k056832", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "312a14.17h", 0x000000, 2*1024*1024, CRC(dc862f19) SHA1(8ec9f8715b622462fb8c79a48162c161eb9fe13b) ) + ROM_LOAD16_BYTE( "312a12.22h", 0x000001, 2*1024*1024, CRC(98c04ddd) SHA1(7bc7af21625466e75003da9fd950437249e75b78) ) + ROM_LOAD16_BYTE( "312a15.15h", 0x400000, 2*1024*1024, CRC(516f2941) SHA1(07415fec2d96fe6b707f801a9e9e963186d83d6a) ) + ROM_LOAD16_BYTE( "312a13.20h", 0x400001, 2*1024*1024, CRC(16e5fdaa) SHA1(f04e09ee4207eb2bd67533997d36f4b3cf42a439) ) + + /* sprites */ + ROM_REGION( 0x800000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD64_WORD( "312a11.25g", 0x000000, 2*1024*1024, CRC(5f474357) SHA1(1f6d99f1ea69e07a65731ea4eae5917452cfcab6) ) + ROM_LOAD64_WORD( "312a10.28g", 0x000002, 2*1024*1024, CRC(3c570d04) SHA1(ebbf7d28726e98c8895c9bf901f8b2dd38018c77) ) + ROM_LOAD64_WORD( "312a09.30g", 0x000004, 2*1024*1024, CRC(b2c5d6d5) SHA1(8248612275ca862c6688de5c6f24f37aeb3f9fe5) ) + ROM_LOAD64_WORD( "312a08.33g", 0x000006, 2*1024*1024, CRC(29015d56) SHA1(7273270804ecefd8f59469c2c2a8a89fb045a12b) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "312a17.9g", 0x000000, 2*1024*1024, CRC(ed101448) SHA1(ef1342f37fbbb092eddee0c237b40989ad42cf26) ) + ROM_LOAD( "312a18.7g", 0x200000, 1*1024*1024, CRC(5717abd7) SHA1(d304d733e7fca0363ea6b3872c2d3bbe4edf1179) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with invisible error + ROM_LOAD( "le2.nv", 0x0000, 0x080, CRC(fec3bc2e) SHA1(64040364d7db12f54e5c11f28a28e030bcf9a0f7) ) +ROM_END + +/* Lethal Enforcers II (US Version) */ +ROM_START( le2u ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_BYTE( "312uaa05.26b", 0x200000, 128*1024, CRC(973aa500) SHA1(ad834b0fed37502ff3e3fe7f608fd5dbe172f452) ) + ROM_LOAD32_BYTE( "312uaa04.28b", 0x200001, 128*1024, CRC(cba39552) SHA1(243f2115047d9e646f69368d78b18be47b7eacc6) ) + ROM_LOAD32_BYTE( "312uaa03.30b", 0x200002, 128*1024, CRC(20bc94e6) SHA1(652ca7b3b7ece9e702134691373e913ce3651401) ) + ROM_LOAD32_BYTE( "312uaa02.33b", 0x200003, 128*1024, CRC(04f3bd9e) SHA1(0617fd065efeae8c5fa665a65ed69a246d7a8ed7) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("312a06.9c", 0x000000, 128*1024, CRC(ff6f2cd4) SHA1(a52cab6b64b54bd60e96437ed91277c76293af2d) ) + ROM_LOAD16_BYTE("312a07.7c", 0x000001, 128*1024, CRC(3d31e989) SHA1(1fdf205b0f9c21093bc6147aaacdf178aa628508) ) + + /* tiles */ + ROM_REGION( 0x800000, "k056832", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "312a14.17h", 0x000000, 2*1024*1024, CRC(dc862f19) SHA1(8ec9f8715b622462fb8c79a48162c161eb9fe13b) ) + ROM_LOAD16_BYTE( "312a12.22h", 0x000001, 2*1024*1024, CRC(98c04ddd) SHA1(7bc7af21625466e75003da9fd950437249e75b78) ) + ROM_LOAD16_BYTE( "312a15.15h", 0x400000, 2*1024*1024, CRC(516f2941) SHA1(07415fec2d96fe6b707f801a9e9e963186d83d6a) ) + ROM_LOAD16_BYTE( "312a13.20h", 0x400001, 2*1024*1024, CRC(16e5fdaa) SHA1(f04e09ee4207eb2bd67533997d36f4b3cf42a439) ) + + /* sprites */ + ROM_REGION( 0x800000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD64_WORD( "312a11.25g", 0x000000, 2*1024*1024, CRC(5f474357) SHA1(1f6d99f1ea69e07a65731ea4eae5917452cfcab6) ) + ROM_LOAD64_WORD( "312a10.28g", 0x000002, 2*1024*1024, CRC(3c570d04) SHA1(ebbf7d28726e98c8895c9bf901f8b2dd38018c77) ) + ROM_LOAD64_WORD( "312a09.30g", 0x000004, 2*1024*1024, CRC(b2c5d6d5) SHA1(8248612275ca862c6688de5c6f24f37aeb3f9fe5) ) + ROM_LOAD64_WORD( "312a08.33g", 0x000006, 2*1024*1024, CRC(29015d56) SHA1(7273270804ecefd8f59469c2c2a8a89fb045a12b) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "312a17.9g", 0x000000, 2*1024*1024, CRC(ed101448) SHA1(ef1342f37fbbb092eddee0c237b40989ad42cf26) ) + ROM_LOAD( "312a18.7g", 0x200000, 1*1024*1024, CRC(5717abd7) SHA1(d304d733e7fca0363ea6b3872c2d3bbe4edf1179) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with invisible error + ROM_LOAD( "le2u.nv", 0x0000, 0x080, CRC(d46b3878) SHA1(81bf4331547ce977eaa185f7281625fb695f6deb) ) +ROM_END + +/* Lethal Enforcers II (Japan version) */ +ROM_START( le2j ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + + ROM_LOAD32_BYTE( "312jaa05.26b", 0x200000, 0x020000, CRC(7eaa6ce2) SHA1(59d3460be98ac32ebea0422c2a9962556a9e964e) ) + ROM_LOAD32_BYTE( "312jaa04.28b", 0x200001, 0x020000, CRC(c3d19ddc) SHA1(3bc3e705567e8e59e56a40ae64381082c4f22271) ) + ROM_LOAD32_BYTE( "312jaa03.30b", 0x200002, 0x020000, CRC(9ad95a7c) SHA1(397b301f8bc4d5f039f47263ad73da5afc14712c) ) + ROM_LOAD32_BYTE( "312jaa02.33b", 0x200003, 0x020000, CRC(e971cb87) SHA1(53e2e7c4b96e4331df27d4788aa1bb81efddf9f0) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("312b06.9c", 0x000000, 128*1024, CRC(a6f62539) SHA1(b333e02c55237a0429d8c5386ec68b67797a1107) ) + ROM_LOAD16_BYTE("312b07.7c", 0x000001, 128*1024, CRC(1aa19c41) SHA1(5b879fb17ac514f266e63db6af50f2f4af7da32c) ) + + /* tiles */ + ROM_REGION( 0x800000, "k056832", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "312a14.17h", 0x000000, 2*1024*1024, CRC(dc862f19) SHA1(8ec9f8715b622462fb8c79a48162c161eb9fe13b) ) + ROM_LOAD16_BYTE( "312a12.22h", 0x000001, 2*1024*1024, CRC(98c04ddd) SHA1(7bc7af21625466e75003da9fd950437249e75b78) ) + ROM_LOAD16_BYTE( "312a15.15h", 0x400000, 2*1024*1024, CRC(516f2941) SHA1(07415fec2d96fe6b707f801a9e9e963186d83d6a) ) + ROM_LOAD16_BYTE( "312a13.20h", 0x400001, 2*1024*1024, CRC(16e5fdaa) SHA1(f04e09ee4207eb2bd67533997d36f4b3cf42a439) ) + + /* sprites */ + ROM_REGION( 0x800000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD64_WORD( "312a11.25g", 0x000000, 2*1024*1024, CRC(5f474357) SHA1(1f6d99f1ea69e07a65731ea4eae5917452cfcab6) ) + ROM_LOAD64_WORD( "312a10.28g", 0x000002, 2*1024*1024, CRC(3c570d04) SHA1(ebbf7d28726e98c8895c9bf901f8b2dd38018c77) ) + ROM_LOAD64_WORD( "312a09.30g", 0x000004, 2*1024*1024, CRC(b2c5d6d5) SHA1(8248612275ca862c6688de5c6f24f37aeb3f9fe5) ) + ROM_LOAD64_WORD( "312a08.33g", 0x000006, 2*1024*1024, CRC(29015d56) SHA1(7273270804ecefd8f59469c2c2a8a89fb045a12b) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "312a17.9g", 0x000000, 2*1024*1024, CRC(ed101448) SHA1(ef1342f37fbbb092eddee0c237b40989ad42cf26) ) + ROM_LOAD( "312a18.7g", 0x200000, 1*1024*1024, CRC(5717abd7) SHA1(d304d733e7fca0363ea6b3872c2d3bbe4edf1179) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with invisible error + ROM_LOAD( "le2j.nv", 0x0000, 0x080, CRC(f6790425) SHA1(f233f3c09c4cdbd1c6e5204fc6554a4826b44c59) ) +ROM_END + +/* Racin' Force */ +ROM_START( racinfrc ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "250eac02.34n", 0x200000, 512*1024, CRC(df2a48c0) SHA1(f9491f969b9d8e39735b1d2e451b2194dfa933f4) ) + ROM_LOAD32_WORD_SWAP( "250eac03.31n", 0x200002, 512*1024, CRC(6da86a4d) SHA1(cff7bde43e2ce902a077974b999f3db484b83020) ) + + /* data roms */ + ROM_LOAD32_WORD_SWAP( "250a04.34s", 0x400000, 2*1024*1024, CRC(45e4d43c) SHA1(a668431d53b50fd41e1fa3c8959c0dc96e50c52b) ) + ROM_LOAD32_WORD_SWAP( "250a05.31s", 0x400002, 2*1024*1024, CRC(a235af3e) SHA1(381cd16552f007ccb508411a03fdfd18e32203d0) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("250a06.8p", 0x000000, 128*1024, CRC(2d0a3ff1) SHA1(ce4261d5f86821e98e971a35403c793506d0566b) ) + ROM_LOAD16_BYTE("250a07.6p", 0x000001, 128*1024, CRC(612b670a) SHA1(255515fa5096fcc4681b32defa0ae855286d8ed1) ) + + /* tiles */ + ROM_REGION( 0x300000, "k056832", ROMREGION_ERASE00 ) + TILE_WORDS2_ROM_LOAD( "250a15.19y", 0x000000, 0x100000, CRC(60abc472) SHA1(ff360d81222e2d8cd55b907ca5a9947f958aaaab) ) + TILE_BYTES2_ROM_LOAD( "250a14.21y", 0x000004, 0x080000, CRC(d14abf98) SHA1(14827a01deb659c96fd38a5c76f1c9cead5f83c7) ) + + /* sprites */ + ROM_REGION( 0xa00000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD32_WORD( "250a12.26y", 0x000000, 0x200000, CRC(e4ca3cff) SHA1(5dfddda4b5257e98a53fb8669714004ae3aeb3a7) ) + ROM_LOAD32_WORD( "250a10.31y", 0x000002, 0x200000, CRC(75c02d12) SHA1(3ca471d887b92261b1c3f50777903df13f07b1a9) ) + ROM_LOAD32_WORD( "250a13.24y", 0x400000, 0x200000, CRC(7aeef929) SHA1(9f656e2ede27aea7d51f0f0a3a91a8f2c2d250c0) ) + ROM_LOAD32_WORD( "250a11.28y", 0x400002, 0x200000, CRC(dfbce309) SHA1(831444e7a7588833ffc9b712412f7aef34a7fa2e) ) + ROM_LOAD( "250a08.36y", 0x800000, 0x200000, CRC(25ff6414) SHA1(0af4ef7fe00d7da5fcb5dd0770d470a556c62d61) ) + + /* K053936 tiles (CROM and HROM from the schematics) */ + ROM_REGION( 0x300000, "gfx3", ROMREGION_ERASE00 ) + T1_PSAC6_ROM_LOAD( "250a20.10d", 0x000000, 0x100000, CRC(26a2fcaf) SHA1(d2e38dc0c61e6fed93441dfe2b811993ac9f0ad3) ) + T1_PSAC6_ROM_LOAD( "250a21.7d", 0x000001, 0x100000, CRC(370d7771) SHA1(59ab52287d5aca37baa68d941db165d8da212c69) ) + T1_PSAC6_ROM_LOAD( "250a22.5d", 0x000002, 0x100000, CRC(c66a7775) SHA1(80087b2a3a221f8b2d6c4d1c1c535602e611b561) ) + + ROM_REGION( 0x300000, "gfx4", ROMREGION_ERASE00 ) + T1_PSAC6_ROM_LOAD( "250a24.10h", 0x000000, 0x100000, CRC(a14547da) SHA1(a379ff2f62b340a6ea46c84878a865ccff0d132c) ) + T1_PSAC6_ROM_LOAD( "250a25.7h", 0x000001, 0x100000, CRC(58310501) SHA1(e0be82f112fd86cdb448c9c8ceda0ad4cc03e3e4) ) + T1_PSAC6_ROM_LOAD( "250a26.5h", 0x000002, 0x100000, CRC(f72e4cbe) SHA1(822895b42fe4dc8fc1c55501009b6d6e57ee46a1) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "250a17.14y", 0x000000, 2*1024*1024, CRC(adefa079) SHA1(d25911e3a02d92dc936c3d7e9d76fc270bd1a75a) ) + ROM_LOAD( "250a18.12y", 0x200000, 2*1024*1024, CRC(8014a2eb) SHA1(d82f0a7d559340ae05a78ecc8bb69bb35b9c0658) ) + + // note, it seems impossible to calibrate the controls (again!), this has nothing to do with the default eeprom! + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "racinfrc.nv", 0x0000, 0x080, CRC(dc88c693) SHA1(a7967f390db043570803c79edf984a3e6bdbd172) ) +ROM_END + + +/* Racin' Force */ +ROM_START( racinfrcu ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "250uab02.34n", 0x200000, 512*1024, CRC(315040c6) SHA1(940d54c1eb898d9a44d823f9f5ae9e91a20f746f) ) + ROM_LOAD32_WORD_SWAP( "250uab03.31n", 0x200002, 512*1024, CRC(171134ab) SHA1(308b7e76a80c3d860a15408a144b1e0f76fcee87) ) + + /* data roms */ + ROM_LOAD32_WORD_SWAP( "250a04.34s", 0x400000, 2*1024*1024, CRC(45e4d43c) SHA1(a668431d53b50fd41e1fa3c8959c0dc96e50c52b) ) + ROM_LOAD32_WORD_SWAP( "250a05.31s", 0x400002, 2*1024*1024, CRC(a235af3e) SHA1(381cd16552f007ccb508411a03fdfd18e32203d0) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("250a06.8p", 0x000000, 128*1024, CRC(2d0a3ff1) SHA1(ce4261d5f86821e98e971a35403c793506d0566b) ) + ROM_LOAD16_BYTE("250a07.6p", 0x000001, 128*1024, CRC(612b670a) SHA1(255515fa5096fcc4681b32defa0ae855286d8ed1) ) + + /* tiles */ + ROM_REGION( 0x300000, "k056832", ROMREGION_ERASE00 ) + TILE_WORDS2_ROM_LOAD( "250a15.19y", 0x000000, 0x100000, CRC(60abc472) SHA1(ff360d81222e2d8cd55b907ca5a9947f958aaaab) ) + TILE_BYTES2_ROM_LOAD( "250a14.21y", 0x000004, 0x080000, CRC(d14abf98) SHA1(14827a01deb659c96fd38a5c76f1c9cead5f83c7) ) + + /* sprites */ + ROM_REGION( 0xa00000, "k055673", ROMREGION_ERASE00 ) + ROM_LOAD32_WORD( "250a12.26y", 0x000000, 0x200000, CRC(e4ca3cff) SHA1(5dfddda4b5257e98a53fb8669714004ae3aeb3a7) ) + ROM_LOAD32_WORD( "250a10.31y", 0x000002, 0x200000, CRC(75c02d12) SHA1(3ca471d887b92261b1c3f50777903df13f07b1a9) ) + ROM_LOAD32_WORD( "250a13.24y", 0x400000, 0x200000, CRC(7aeef929) SHA1(9f656e2ede27aea7d51f0f0a3a91a8f2c2d250c0) ) + ROM_LOAD32_WORD( "250a11.28y", 0x400002, 0x200000, CRC(dfbce309) SHA1(831444e7a7588833ffc9b712412f7aef34a7fa2e) ) + ROM_LOAD( "250a08.36y", 0x800000, 0x200000, CRC(25ff6414) SHA1(0af4ef7fe00d7da5fcb5dd0770d470a556c62d61) ) + + /* K053936 tiles (CROM and HROM from the schematics) */ + ROM_REGION( 0x300000, "gfx3", ROMREGION_ERASE00 ) + T1_PSAC6_ROM_LOAD( "250a20.10d", 0x000000, 0x100000, CRC(26a2fcaf) SHA1(d2e38dc0c61e6fed93441dfe2b811993ac9f0ad3) ) + T1_PSAC6_ROM_LOAD( "250a21.7d", 0x000001, 0x100000, CRC(370d7771) SHA1(59ab52287d5aca37baa68d941db165d8da212c69) ) + T1_PSAC6_ROM_LOAD( "250a22.5d", 0x000002, 0x100000, CRC(c66a7775) SHA1(80087b2a3a221f8b2d6c4d1c1c535602e611b561) ) + + ROM_REGION( 0x300000, "gfx4", ROMREGION_ERASE00 ) + T1_PSAC6_ROM_LOAD( "250a24.10h", 0x000000, 0x100000, CRC(a14547da) SHA1(a379ff2f62b340a6ea46c84878a865ccff0d132c) ) + T1_PSAC6_ROM_LOAD( "250a25.7h", 0x000001, 0x100000, CRC(58310501) SHA1(e0be82f112fd86cdb448c9c8ceda0ad4cc03e3e4) ) + T1_PSAC6_ROM_LOAD( "250a26.5h", 0x000002, 0x100000, CRC(f72e4cbe) SHA1(822895b42fe4dc8fc1c55501009b6d6e57ee46a1) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "250a17.14y", 0x000000, 2*1024*1024, CRC(adefa079) SHA1(d25911e3a02d92dc936c3d7e9d76fc270bd1a75a) ) + ROM_LOAD( "250a18.12y", 0x200000, 2*1024*1024, CRC(8014a2eb) SHA1(d82f0a7d559340ae05a78ecc8bb69bb35b9c0658) ) + + // note, it seems impossible to calibrate the controls (again!), this has nothing to do with the default eeprom! + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "racinfrcu.nv", 0x0000, 0x080, CRC(369e1a84) SHA1(bfed0145d89550b1a1661f3ccc612505053063f8) ) +ROM_END + + +/* +Open Golf Championship - version EAE +Konami, 1994 + +This game runs on Konami GX hardware (Type 1 bottom board) + +Top Board = Standard System GX CPU Board (PWB354192C) + +PCB Layout (Bottom Board) + +PWB354207B +-------------------------------------- +A23 +A22 A26 +A21 A25 A07 M514256(x12) +A20 A24 A06 + A18 + A17 + 41256 A16 + 41256 CXK5864 056540 A15 + 053936 CXK5864 A14 + 41256 CXK5864 A13 + A12 + A11 + D03 A05 A10 + D02 A04 A09 + A08 +-------------------------------------- + +*/ + +ROM_START( opengolf ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "218eae02.34n", 0x200000, 512*1024, CRC(6f99ddb0) SHA1(99b18c571ce5b67dc8572ffef737b7b6beaf740e) ) + ROM_LOAD32_WORD_SWAP( "218eae03.31n", 0x200002, 512*1024, CRC(c173cf3c) SHA1(f78fd40717997e913b0183f9f2d03a0433071c93) ) + ROM_LOAD32_WORD_SWAP( "218eae02.34n", 0x300000, 512*1024, CRC(6f99ddb0) SHA1(99b18c571ce5b67dc8572ffef737b7b6beaf740e) ) + ROM_LOAD32_WORD_SWAP( "218eae03.31n", 0x300002, 512*1024, CRC(c173cf3c) SHA1(f78fd40717997e913b0183f9f2d03a0433071c93) ) + + /* data roms */ + ROM_LOAD32_WORD_SWAP( "218a04.34s", 0x400000, 512*1024, CRC(e50043a7) SHA1(d3a8e214362c34c4151408f422c9b1c723f7f01c) ) + ROM_LOAD32_WORD_SWAP( "218a05.31s", 0x400002, 512*1024, CRC(46c6b5d3) SHA1(e59c6d2dac9db635589149e4b4852e5f6a9c3c4f) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("218a06.8p", 0x000000, 128*1024, CRC(6755ccf9) SHA1(3bcb18302c385a937c748cf586970c12cef21b38) ) + ROM_LOAD16_BYTE("218a07.6p", 0x000001, 128*1024, CRC(221e5293) SHA1(44b0b4fa37da4c19c29d4d2e5b93b94fbec03633) ) + + /* tiles */ + ROM_REGION( 0x600000, "k056832", ROMREGION_ERASE00 ) + TILE_WORD_ROM_LOAD( "218a15.19y", 0x000000, 2*1024*1024, CRC(78ddc8af) SHA1(24313881dbf7e1b06da008080b0143c3ca5e15b1) ) + TILE_WORD_ROM_LOAD( "218a16.16y", 0x280000, 512*1024, CRC(a41a3ec8) SHA1(dfef4c3e4d6d4e453a4958f2bd52788497c64093) ) + TILE_BYTE_ROM_LOAD( "218a14.22y", 0x000004, 1*1024*1024, CRC(508cd75e) SHA1(adfaac92bc55f60b178a5817c48774a664d8980d) ) + + /* sprites */ + ROM_REGION( 0x900000, "k055673", ROMREGION_ERASE00 ) + _48_WORD_ROM_LOAD( "218a12.26y", 0x000000, 2*1024*1024, CRC(83158653) SHA1(b7e43d63f12a793b18ce9fc9cc2c38352d211905) ) + _48_WORD_ROM_LOAD( "218a10.31y", 0x000002, 2*1024*1024, CRC(059bfee3) SHA1(e7f4621313b7f9a6cad81d455700172654bc7404) ) + _48_WORD_ROM_LOAD( "218a08.35y", 0x000004, 2*1024*1024, CRC(5b7098f3) SHA1(91bedf731e94d1554f9a8f86f79425a2c58bbaf9) ) + _48_WORD_ROM_LOAD( "218a13.24y", 0x600000, 1*1024*1024, CRC(b9ffd12a) SHA1(f8a689957b8ff966a38f999a679cdbf18a6dfc77) ) + _48_WORD_ROM_LOAD( "218a11.28y", 0x600002, 1*1024*1024, CRC(b57231e5) SHA1(e1cd1854e909ca53dc2c32b27e5f9bb2217b0e4c) ) + _48_WORD_ROM_LOAD( "218a09.33y", 0x600004, 1*1024*1024, CRC(13627443) SHA1(b51758e19ed7d6bb1e313f7c8a509ad1aad8b22c) ) + + /* K053936 tiles (CROM and HROM from the schematics) */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) + T1_PSAC8_ROM_LOAD( "218a20.10d", 0x000000, 0x200000, CRC(f0ac2d6f) SHA1(acae9e20d663932a9a44a2e1089546338442c71f) ) + T1_PSAC8_ROM_LOAD( "218a21.7d", 0x000001, 0x200000, CRC(cb15122a) SHA1(2d159dcfbd4a7fc6e824c1be0cc5b81dee7ce8a3) ) + T1_PSAC8_ROM_LOAD( "218a22.5d", 0x000002, 0x200000, CRC(1b08d7dc) SHA1(2b963dbc415a30d3545ea730e47a592798f30a45) ) + T1_PSAC8_ROM_LOAD( "218a23.3d", 0x000003, 0x200000, CRC(1e4224b5) SHA1(f34849d500a35001944da6b8864c796e7a0a7224) ) + + ROM_REGION( 0x600000, "gfx4", ROMREGION_ERASE00 ) + T1_PSAC6_ROM_LOAD( "218a24.10h", 0x000000, 0x200000, CRC(e938d96a) SHA1(176a9bfd252f01bc034ca348d018705926a1a545) ) + T1_PSAC6_ROM_LOAD( "218a25.7h", 0x000001, 0x200000, CRC(11600c2d) SHA1(721c9361761dd20810ff18c63543b222c98a47a4) ) + T1_PSAC6_ROM_LOAD( "218a26.5h", 0x000002, 0x200000, CRC(b37e4b7a) SHA1(3d21e540a366f6ef8ba761855fceecd8591179d7) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "218a17.14y", 0x000000, 2*1024*1024, CRC(0b525127) SHA1(218b306c12e1094a676815b7dddaf13bf19be2d5) ) + ROM_LOAD( "218a18.12y", 0x200000, 1*1024*1024, CRC(98ec4cfb) SHA1(638753f9d9269719a37133b9c39c242507fdd8ac) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "opengolf.nv", 0x0000, 0x080, CRC(d49bf7c3) SHA1(294c772a2f562c01e7c4d15068ba4e80e9522f9f) ) +ROM_END + +/* Konami's Open Golf Championship - version EAD */ +ROM_START( opengolf2 ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + ROM_LOAD32_WORD_SWAP( "218ead02.34n", 0x200000, 512*1024, CRC(eeb58816) SHA1(fe88a4515b552975f78897543bc564495b69dd68) ) + ROM_LOAD32_WORD_SWAP( "218ead03.31n", 0x200002, 512*1024, CRC(5c36f84c) SHA1(8dcbc9e1a8857be9d407a9d0e962a62b963e7187) ) + ROM_LOAD32_WORD_SWAP( "218ead02.34n", 0x300000, 512*1024, CRC(eeb58816) SHA1(fe88a4515b552975f78897543bc564495b69dd68) ) + ROM_LOAD32_WORD_SWAP( "218ead03.31n", 0x300002, 512*1024, CRC(5c36f84c) SHA1(8dcbc9e1a8857be9d407a9d0e962a62b963e7187) ) + + /* data roms */ + ROM_LOAD32_WORD_SWAP( "218a04.34s", 0x400000, 512*1024, CRC(e50043a7) SHA1(d3a8e214362c34c4151408f422c9b1c723f7f01c) ) + ROM_LOAD32_WORD_SWAP( "218a05.31s", 0x400002, 512*1024, CRC(46c6b5d3) SHA1(e59c6d2dac9db635589149e4b4852e5f6a9c3c4f) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("218a06.8p", 0x000000, 128*1024, CRC(6755ccf9) SHA1(3bcb18302c385a937c748cf586970c12cef21b38) ) + ROM_LOAD16_BYTE("218a07.6p", 0x000001, 128*1024, CRC(221e5293) SHA1(44b0b4fa37da4c19c29d4d2e5b93b94fbec03633) ) + + /* tiles */ + ROM_REGION( 0x600000, "k056832", ROMREGION_ERASE00 ) + TILE_WORD_ROM_LOAD( "218a15.19y", 0x000000, 2*1024*1024, CRC(78ddc8af) SHA1(24313881dbf7e1b06da008080b0143c3ca5e15b1) ) + TILE_WORD_ROM_LOAD( "218a16.16y", 0x280000, 512*1024, CRC(a41a3ec8) SHA1(dfef4c3e4d6d4e453a4958f2bd52788497c64093) ) + TILE_BYTE_ROM_LOAD( "218a14.22y", 0x000004, 1*1024*1024, CRC(508cd75e) SHA1(adfaac92bc55f60b178a5817c48774a664d8980d) ) + + /* sprites */ + ROM_REGION( 0x900000, "k055673", ROMREGION_ERASE00 ) + _48_WORD_ROM_LOAD( "218a12.26y", 0x000000, 2*1024*1024, CRC(83158653) SHA1(b7e43d63f12a793b18ce9fc9cc2c38352d211905) ) + _48_WORD_ROM_LOAD( "218a10.31y", 0x000002, 2*1024*1024, CRC(059bfee3) SHA1(e7f4621313b7f9a6cad81d455700172654bc7404) ) + _48_WORD_ROM_LOAD( "218a08.35y", 0x000004, 2*1024*1024, CRC(5b7098f3) SHA1(91bedf731e94d1554f9a8f86f79425a2c58bbaf9) ) + _48_WORD_ROM_LOAD( "218a13.24y", 0x600000, 1*1024*1024, CRC(b9ffd12a) SHA1(f8a689957b8ff966a38f999a679cdbf18a6dfc77) ) + _48_WORD_ROM_LOAD( "218a11.28y", 0x600002, 1*1024*1024, CRC(b57231e5) SHA1(e1cd1854e909ca53dc2c32b27e5f9bb2217b0e4c) ) + _48_WORD_ROM_LOAD( "218a09.33y", 0x600004, 1*1024*1024, CRC(13627443) SHA1(b51758e19ed7d6bb1e313f7c8a509ad1aad8b22c) ) + + /* K053936 tiles (CROM and HROM from the schematics) */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) + T1_PSAC8_ROM_LOAD( "218a20.10d", 0x000000, 0x200000, CRC(f0ac2d6f) SHA1(acae9e20d663932a9a44a2e1089546338442c71f) ) + T1_PSAC8_ROM_LOAD( "218a21.7d", 0x000001, 0x200000, CRC(cb15122a) SHA1(2d159dcfbd4a7fc6e824c1be0cc5b81dee7ce8a3) ) + T1_PSAC8_ROM_LOAD( "218a22.5d", 0x000002, 0x200000, CRC(1b08d7dc) SHA1(2b963dbc415a30d3545ea730e47a592798f30a45) ) + T1_PSAC8_ROM_LOAD( "218a23.3d", 0x000003, 0x200000, CRC(1e4224b5) SHA1(f34849d500a35001944da6b8864c796e7a0a7224) ) + + ROM_REGION( 0x600000, "gfx4", ROMREGION_ERASE00 ) + T1_PSAC6_ROM_LOAD( "218a24.10h", 0x000000, 0x200000, CRC(e938d96a) SHA1(176a9bfd252f01bc034ca348d018705926a1a545) ) + T1_PSAC6_ROM_LOAD( "218a25.7h", 0x000001, 0x200000, CRC(11600c2d) SHA1(721c9361761dd20810ff18c63543b222c98a47a4) ) + T1_PSAC6_ROM_LOAD( "218a26.5h", 0x000002, 0x200000, CRC(b37e4b7a) SHA1(3d21e540a366f6ef8ba761855fceecd8591179d7) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "218a17.14y", 0x000000, 2*1024*1024, CRC(0b525127) SHA1(218b306c12e1094a676815b7dddaf13bf19be2d5) ) + ROM_LOAD( "218a18.12y", 0x200000, 1*1024*1024, CRC(98ec4cfb) SHA1(638753f9d9269719a37133b9c39c242507fdd8ac) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "opengolf2.nv", 0x0000, 0x080, CRC(c09fc0e6) SHA1(32807752344763613440bee46da24d605e62eace) ) +ROM_END + +/* Golfing Greats 2 */ +ROM_START( ggreats2 ) + /* main program */ + ROM_REGION( 0x800000, "maincpu", 0 ) + GX_BIOS + + ROM_LOAD32_WORD_SWAP( "218jac02.34n", 0x200000, 0x080000, CRC(e4d47f92) SHA1(4761cf69670d97db548b146b127c9af04f8809d6) ) + ROM_LOAD32_WORD_SWAP( "218jac03.31n", 0x200002, 0x080000, CRC(ec10c0b2) SHA1(4084d8420c53e73630786adf1a4f0fde548fa212) ) + + /* data roms */ + ROM_LOAD32_WORD_SWAP( "218a04.34s", 0x400000, 512*1024, CRC(e50043a7) SHA1(d3a8e214362c34c4151408f422c9b1c723f7f01c) ) + ROM_LOAD32_WORD_SWAP( "218a05.31s", 0x400002, 512*1024, CRC(46c6b5d3) SHA1(e59c6d2dac9db635589149e4b4852e5f6a9c3c4f) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE("218a06.8p", 0x000000, 128*1024, CRC(6755ccf9) SHA1(3bcb18302c385a937c748cf586970c12cef21b38) ) + ROM_LOAD16_BYTE("218a07.6p", 0x000001, 128*1024, CRC(221e5293) SHA1(44b0b4fa37da4c19c29d4d2e5b93b94fbec03633) ) + + /* tiles */ + ROM_REGION( 0x600000, "k056832", ROMREGION_ERASE00 ) + TILE_WORD_ROM_LOAD( "218a15.19y", 0x000000, 2*1024*1024, CRC(78ddc8af) SHA1(24313881dbf7e1b06da008080b0143c3ca5e15b1) ) + TILE_WORD_ROM_LOAD( "218a16.16y", 0x280000, 512*1024, CRC(a41a3ec8) SHA1(dfef4c3e4d6d4e453a4958f2bd52788497c64093) ) + TILE_BYTE_ROM_LOAD( "218a14.22y", 0x000004, 1*1024*1024, CRC(508cd75e) SHA1(adfaac92bc55f60b178a5817c48774a664d8980d) ) + + /* sprites */ + ROM_REGION( 0x900000, "k055673", ROMREGION_ERASE00 ) + _48_WORD_ROM_LOAD( "218a12.26y", 0x000000, 2*1024*1024, CRC(83158653) SHA1(b7e43d63f12a793b18ce9fc9cc2c38352d211905) ) + _48_WORD_ROM_LOAD( "218a10.31y", 0x000002, 2*1024*1024, CRC(059bfee3) SHA1(e7f4621313b7f9a6cad81d455700172654bc7404) ) + _48_WORD_ROM_LOAD( "218a08.35y", 0x000004, 2*1024*1024, CRC(5b7098f3) SHA1(91bedf731e94d1554f9a8f86f79425a2c58bbaf9) ) + _48_WORD_ROM_LOAD( "218a13.24y", 0x600000, 1*1024*1024, CRC(b9ffd12a) SHA1(f8a689957b8ff966a38f999a679cdbf18a6dfc77) ) + _48_WORD_ROM_LOAD( "218a11.28y", 0x600002, 1*1024*1024, CRC(b57231e5) SHA1(e1cd1854e909ca53dc2c32b27e5f9bb2217b0e4c) ) + _48_WORD_ROM_LOAD( "218a09.33y", 0x600004, 1*1024*1024, CRC(13627443) SHA1(b51758e19ed7d6bb1e313f7c8a509ad1aad8b22c) ) + + /* K053936 tiles (CROM and HROM from the schematics) */ + ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) + T1_PSAC8_ROM_LOAD( "218a20.10d", 0x000000, 0x200000, CRC(f0ac2d6f) SHA1(acae9e20d663932a9a44a2e1089546338442c71f) ) + T1_PSAC8_ROM_LOAD( "218a21.7d", 0x000001, 0x200000, CRC(cb15122a) SHA1(2d159dcfbd4a7fc6e824c1be0cc5b81dee7ce8a3) ) + T1_PSAC8_ROM_LOAD( "218a22.5d", 0x000002, 0x200000, CRC(1b08d7dc) SHA1(2b963dbc415a30d3545ea730e47a592798f30a45) ) + T1_PSAC8_ROM_LOAD( "218a23.3d", 0x000003, 0x200000, CRC(1e4224b5) SHA1(f34849d500a35001944da6b8864c796e7a0a7224) ) + + ROM_REGION( 0x600000, "gfx4", ROMREGION_ERASE00 ) + T1_PSAC6_ROM_LOAD( "218a24.10h", 0x000000, 0x200000, CRC(e938d96a) SHA1(176a9bfd252f01bc034ca348d018705926a1a545) ) + T1_PSAC6_ROM_LOAD( "218a25.7h", 0x000001, 0x200000, CRC(11600c2d) SHA1(721c9361761dd20810ff18c63543b222c98a47a4) ) + T1_PSAC6_ROM_LOAD( "218a26.5h", 0x000002, 0x200000, CRC(b37e4b7a) SHA1(3d21e540a366f6ef8ba761855fceecd8591179d7) ) + + /* sound data */ + ROM_REGION( 0x400000, "k054539", 0 ) + ROM_LOAD( "218a17.14y", 0x000000, 2*1024*1024, CRC(0b525127) SHA1(218b306c12e1094a676815b7dddaf13bf19be2d5) ) + ROM_LOAD( "218a18.12y", 0x200000, 1*1024*1024, CRC(98ec4cfb) SHA1(638753f9d9269719a37133b9c39c242507fdd8ac) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting with error + ROM_LOAD( "ggreats2.nv", 0x0000, 0x080, CRC(4db10b5c) SHA1(29e3a59e4101349ace33d49b5fe59f0c785979b3) ) +ROM_END + +/**********************************************************************************/ +/* initializers */ + +MACHINE_START_MEMBER(konamigx_state,konamigx) +{ + m_lamp.resolve(); + + save_item(NAME(m_sound_ctrl)); + save_item(NAME(m_sound_intck)); + + save_item(NAME(m_gx_wrport1_0)); + save_item(NAME(m_gx_wrport1_1)); + save_item(NAME(m_gx_wrport2)); + + save_item(NAME(m_gx_rdport1_3)); + save_item(NAME(m_gx_syncen)); + save_item(NAME(m_suspension_active)); + save_item(NAME(m_prev_pixel_clock)); +} + +MACHINE_RESET_MEMBER(konamigx_state,konamigx) +{ + m_gx_wrport1_0 = m_gx_wrport1_1 = 0; + m_gx_wrport2 = 0; + +/* + bit0 : EEPROM data(don't care) + bit1 : DMA busy (cleared) + bit2-7: IRQ ready (all set) +*/ + m_gx_rdport1_3 = 0xfc; + m_gx_syncen = 0; + m_suspension_active = 0; + m_prev_pixel_clock = 0xff; + + // Hold sound CPUs in reset + m_soundcpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); + m_soundcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + m_dasp->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + + + // [HACK] This shouldn't be necessary + if (!strcmp(machine().system().name, "tkmmpzdm")) + { + // boost voice(chip 1 channel 3-7) + for (int i=3; i<=7; i++) m_k054539_2->set_gain(i, 2.0); + } + else if ((!strcmp(machine().system().name, "dragoonj")) || (!strcmp(machine().system().name, "dragoona"))) + { + // soften percussions(chip 1 channel 0-3), boost voice(chip 1 channel 4-7) + for (int i=0; i<=3; i++) + { + m_k054539_2->set_gain(i, 0.8); + m_k054539_2->set_gain(i+4, 2.0); + } + } + + const char *setname = machine().system().name; + + if (m_use_68020_post_clock_hack) + { + // [HACK] The 68020 instruction cache is disabled during POST. + // We don't emulate this nor the slow program ROM access times (120ns) + // so some games that rely on wait loops timeout far too quickly + // waiting for the sound system tests to complete. + + // To hack around this, we underclock the 68020 for 12 seconds during POST (soccerss requires longest) + m_maincpu->set_clock_scale(0.66f); + m_boothack_timer->adjust(attotime::from_seconds(12)); + } + + if (!strcmp(setname, "le2") || + !strcmp(setname, "le2u")|| + !strcmp(setname, "le2j")) + m_k055555->K055555_write_reg(K55_INPUT_ENABLES, 1); // it doesn't turn on the video output at first for the test screens, maybe it should default to ON for all games + + +} + +struct GXGameInfoT +{ + const char *romname; + uint32_t cfgport; + uint32_t special; + uint32_t readback; +}; + +#define BPP4 0 +#define BPP5 1 +#define BPP6 2 +#define BPP66 3 + +static const GXGameInfoT gameDefs[] = +{ + { "racinfrc", 11, 0, BPP4 }, + { "racinfrcu",11, 0, BPP4 }, + { "opengolf", 11, 0, BPP4 }, + { "opengolf2",11, 0, BPP4 }, + { "ggreats2", 11, 0, BPP4 }, + { "le2", 13, 1, BPP4 }, + { "le2u", 13, 1, BPP4 }, + { "le2j", 13, 1, BPP4 }, + { "gokuparo", 7, 0, BPP5 }, + { "fantjour", 7, 9, BPP5 }, + { "fantjoura", 7, 9, BPP5 }, + { "puzldama", 7, 0, BPP5 }, + { "tbyahhoo", 7, 8, BPP5 }, + { "tkmmpzdm", 7, 2, BPP6 }, + { "dragoonj", 7, 3, BPP4 }, + { "dragoona", 7, 3, BPP4 }, + { "sexyparo", 7, 4, BPP5 }, + { "sexyparoa", 7, 4, BPP5 }, + { "daiskiss", 7, 5, BPP5 }, + { "tokkae", 7, 0, BPP5 }, + { "salmndr2", 7, 6, BPP66 }, + { "salmndr2a", 7, 6, BPP66 }, + { "winspike", 8, 7, BPP4 }, + { "winspikej", 8, 7, BPP4 }, + { "soccerss", 7, 0, BPP4 }, + { "soccerssu", 7, 0, BPP4 }, + { "soccerssa", 7, 0, BPP4 }, + { "soccerssj", 7, 0, BPP4 }, + { "soccerssja",7, 0, BPP4 }, + { "vsnetscr", 7, 0, BPP4 }, + { "vsnetscru", 7, 0, BPP4 }, + { "vsnetscrj", 7, 0, BPP4 }, + { "vsnetscra", 7, 0, BPP4 }, + { "vsnetscreb",7, 0, BPP4 }, + { "rungun2", 7, 0, BPP4 }, + { "slamdnk2", 7, 0, BPP4 }, + { "rushhero", 7, 0, BPP4 }, + { "dragoonas01", 7, 3, BPP4 }, + { "dragoonas02", 7, 3, BPP4 }, + { "dragoonas03", 7, 3, BPP4 }, + { "dragoonas04", 7, 3, BPP4 }, + { "", 0xff,0xff,0xff }, +}; + +READ32_MEMBER( konamigx_state::k_6bpp_rom_long_r ) +{ + return m_k056832->k_6bpp_rom_long_r(offset, mem_mask); +} + +void konamigx_state::init_konamigx() +{ + m_gx_cfgport = -1; + m_last_prot_op = -1; + m_last_prot_clk = 0; + + m_esc_cb = nullptr; + m_resume_trigger = 0; + + m_dmadelay_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(konamigx_state::dmaend_callback),this)); + m_boothack_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(konamigx_state::boothack_callback),this)); + + int i = 0, match = 0, readback = 0; + while ((gameDefs[i].cfgport != 0xff) && (!match)) + { + if (!strcmp(machine().system().name, gameDefs[i].romname)) + { + match = 1; + m_gx_cfgport = gameDefs[i].cfgport; + readback = gameDefs[i].readback; + + switch (gameDefs[i].special) + { + case 1: // LE2 guns + m_maincpu->space(AS_PROGRAM).install_read_handler(0xd44000, 0xd44003, read32_delegate(FUNC(konamigx_state::le2_gun_H_r),this)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0xd44004, 0xd44007, read32_delegate(FUNC(konamigx_state::le2_gun_V_r),this)); + break; + case 2: // tkmmpzdm hack + { + uint32_t *rom = (uint32_t*)memregion("maincpu")->base(); + + // The display is initialized after POST but the copyright screen disabled + // planes B,C,D and didn't bother restoring them. I've spent a good + // amount of time chasing this bug but the cause remains inconclusive. + // My guess is the CCU somehow masked or delayed vblank interrupts + // during the copyright message. + rom[0x810f1] &= ~1; // fix checksum + rom[0x872ea] |= 0xe0000; // enable plane B,C,D + + m_esc_cb = &konamigx_state::tkmmpzdm_esc; + break; + } + + case 3: // dragoon might + m_esc_cb = &konamigx_state::dragoonj_esc; + break; + + case 4: // sexyparo + m_esc_cb = &konamigx_state::sexyparo_esc; + break; + + case 5: // daiskiss + m_esc_cb = &konamigx_state::daiskiss_esc; + break; + + case 6: // salamander 2 + m_esc_cb = &konamigx_state::sal2_esc; + break; + + case 7: // install type 4 Xilinx protection for non-type 3/4 games + m_maincpu->space(AS_PROGRAM).install_write_handler(0xcc0000, 0xcc0007, write32_delegate(FUNC(konamigx_state::type4_prot_w),this)); + break; + + case 8: // tbyahhoo + m_esc_cb = &konamigx_state::tbyahhoo_esc; + break; + + case 9: // fantjour + fantjour_dma_install(); + break; + } + } + + i++; + } + + if (readback == BPP66) + m_maincpu->space(AS_PROGRAM).install_read_handler(0xd00000, 0xd01fff, read32_delegate(FUNC(konamigx_state::k_6bpp_rom_long_r), this)); + + +#undef BPP5 +#undef BPP6 +#undef BPP66 +} + +void konamigx_state::init_posthack() +{ + m_use_68020_post_clock_hack = 1; + init_konamigx(); +} + + +/**********************************************************************************/ +/* year ROM parent machine inp init */ + +/* dummy parent for the BIOS */ +GAME( 1994, konamigx, 0, konamigx_bios, konamigx, konamigx_state, init_konamigx, ROT0, "Konami", "System GX", MACHINE_IS_BIOS_ROOT ) + +/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +/* Type 1: standard with an add-on 53936 on the ROM board, analog inputs, */ +/* and optional LAN capability (only on Racin' Force - chips aren't present on the golf games) */ +/* needs the ROZ layer to be playable */ +/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ + +GAME( 1994, racinfrc, konamigx, racinfrc, racinfrc, konamigx_state, init_posthack, ROT0, "Konami", "Racin' Force (ver EAC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_NODEVICE_LAN ) +GAME( 1994, racinfrcu, racinfrc, racinfrc, racinfrc, konamigx_state, init_posthack, ROT0, "Konami", "Racin' Force (ver UAB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_NODEVICE_LAN ) + +GAME( 1994, opengolf, konamigx, opengolf, racinfrc, konamigx_state, init_posthack, ROT0, "Konami", "Konami's Open Golf Championship (ver EAE)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) +GAME( 1994, opengolf2, opengolf, opengolf, racinfrc, konamigx_state, init_posthack, ROT0, "Konami", "Konami's Open Golf Championship (ver EAD)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) +GAME( 1994, ggreats2, opengolf, opengolf, racinfrc, konamigx_state, init_posthack, ROT0, "Konami", "Golfing Greats 2 (ver JAC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) + +/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +/* Type 2: totally stock, sometimes with funny protection chips on the ROM board */ +/* these games work and are playable with minor graphics glitches */ +/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ + +GAME( 1994, le2, konamigx, le2, le2, konamigx_state, init_konamigx, ROT0, "Konami", "Lethal Enforcers II: Gun Fighters (ver EAA)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, le2u, le2, le2, le2_flip, konamigx_state, init_konamigx, ORIENTATION_FLIP_Y, "Konami", "Lethal Enforcers II: Gun Fighters (ver UAA)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, le2j, le2, le2, le2_flip, konamigx_state, init_konamigx, ORIENTATION_FLIP_Y, "Konami", "Lethal Enforcers II: The Western (ver JAA)", MACHINE_IMPERFECT_GRAPHICS ) + +GAME( 1994, fantjour, konamigx, gokuparo, gokuparo, konamigx_state, init_konamigx, ROT0, "Konami", "Fantastic Journey (ver EAA)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, fantjoura, fantjour, gokuparo, gokuparo, konamigx_state, init_konamigx, ROT0, "Konami", "Fantastic Journey (ver AAA)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, gokuparo, fantjour, gokuparo, gokuparo, konamigx_state, init_konamigx, ROT0, "Konami", "Gokujyou Parodius (ver JAD)", MACHINE_IMPERFECT_GRAPHICS ) + +GAME( 1994, crzcross, konamigx, gokuparo, puzldama, konamigx_state, init_posthack, ROT0, "Konami", "Crazy Cross (ver EAA)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, puzldama, crzcross, gokuparo, puzldama, konamigx_state, init_posthack, ROT0, "Konami", "Taisen Puzzle-dama (ver JAA)", MACHINE_IMPERFECT_GRAPHICS ) + +GAME( 1995, tbyahhoo, konamigx, tbyahhoo, gokuparo, konamigx_state, init_posthack, ROT0, "Konami", "Twin Bee Yahhoo! (ver JAA)", MACHINE_IMPERFECT_GRAPHICS ) + +GAME( 1995, tkmmpzdm, konamigx, konamigx_6bpp, puzldama, konamigx_state, init_konamigx, ROT0, "Konami", "Tokimeki Memorial Taisen Puzzle-dama (ver JAB)", MACHINE_IMPERFECT_GRAPHICS ) + +GAME( 1995, dragoona, konamigx, dragoonj, dragoonj, konamigx_state, init_posthack, ROT0, "Konami", "Dragoon Might (ver AAB)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, dragoonj, dragoona, dragoonj, dragoonj, konamigx_state, init_posthack, ROT0, "Konami", "Dragoon Might (ver JAA)", MACHINE_IMPERFECT_GRAPHICS ) + +GAME( 1996, sexyparo, konamigx, sexyparo, gokuparo, konamigx_state, init_konamigx, ROT0, "Konami", "Sexy Parodius (ver JAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_UNEMULATED_PROTECTION ) +GAME( 1996, sexyparoa, sexyparo, sexyparo, gokuparo, konamigx_state, init_konamigx, ROT0, "Konami", "Sexy Parodius (ver AAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_UNEMULATED_PROTECTION ) + +GAME( 1996, daiskiss, konamigx, konamigx, gokuparo, konamigx_state, init_konamigx, ROT0, "Konami", "Daisu-Kiss (ver JAA)", MACHINE_IMPERFECT_GRAPHICS ) + +GAME( 1996, tokkae, konamigx, konamigx_6bpp, puzldama, konamigx_state, init_konamigx, ROT0, "Konami", "Taisen Tokkae-dama (ver JAA)", MACHINE_IMPERFECT_GRAPHICS ) + +/* protection controls player ship direction in attract mode - doesn't impact playability */ +GAME( 1996, salmndr2, konamigx, salmndr2, gokuparo, konamigx_state, init_konamigx, ROT0, "Konami", "Salamander 2 (ver JAA)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_UNEMULATED_PROTECTION ) +GAME( 1996, salmndr2a, salmndr2, salmndr2, gokuparo, konamigx_state, init_konamigx, ROT0, "Konami", "Salamander 2 (ver AAB)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_UNEMULATED_PROTECTION ) + +/* bad sprite colours, part of tilemap gets blanked out when a game starts (might be more protection) */ +GAME( 1997, winspike, konamigx, winspike, konamigx, konamigx_state, init_konamigx, ROT0, "Konami", "Winning Spike (ver EAA)", MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, winspikej, winspike, winspike, konamigx, konamigx_state, init_konamigx, ROT0, "Konami", "Winning Spike (ver JAA)", MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_GRAPHICS ) + +/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +/* Type 3: dual monitor output and 53936 on the ROM board, external palette RAM */ +/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ + +GAME( 1994, soccerss, konamigx, gxtype3, type3, konamigx_state, init_posthack, ROT0, "Konami", "Soccer Superstars (ver EAC)", MACHINE_IMPERFECT_GRAPHICS ) // writes EAA to EEPROM, but should be version EAC according to labels +GAME( 1994, soccerssu, soccerss, gxtype3, type3, konamigx_state, init_posthack, ROT0, "Konami", "Soccer Superstars (ver UAC)", MACHINE_IMPERFECT_GRAPHICS ) // writes UAA to EEPROM, but should be version UAC according to labels +GAME( 1994, soccerssj, soccerss, gxtype3, type3, konamigx_state, init_posthack, ROT0, "Konami", "Soccer Superstars (ver JAC)", MACHINE_IMPERFECT_GRAPHICS ) // writes JAB to EEPROM, but should be version JAC according to labels +GAME( 1994, soccerssja,soccerss, gxtype3, type3, konamigx_state, init_posthack, ROT0, "Konami", "Soccer Superstars (ver JAA)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, soccerssa, soccerss, gxtype3, type3, konamigx_state, init_posthack, ROT0, "Konami", "Soccer Superstars (ver AAA)", MACHINE_IMPERFECT_GRAPHICS ) + +/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +/* Type 4: dual monitor output and 53936 on the ROM board, external palette RAM, DMA protection */ +/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ + +GAME( 1996, vsnetscr, konamigx, gxtype4_vsn, type3, konamigx_state, init_konamigx, ROT0, "Konami", "Versus Net Soccer (ver EAD)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND ) +GAME( 1996, vsnetscreb,vsnetscr, gxtype4_vsn, type3, konamigx_state, init_konamigx, ROT0, "Konami", "Versus Net Soccer (ver EAB)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND ) +GAME( 1996, vsnetscru, vsnetscr, gxtype4_vsn, type3, konamigx_state, init_konamigx, ROT0, "Konami", "Versus Net Soccer (ver UAB)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND ) +GAME( 1996, vsnetscra, vsnetscr, gxtype4_vsn, type3, konamigx_state, init_konamigx, ROT0, "Konami", "Versus Net Soccer (ver AAA)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND ) +GAME( 1996, vsnetscrj, vsnetscr, gxtype4_vsn, type3, konamigx_state, init_konamigx, ROT0, "Konami", "Versus Net Soccer (ver JAB)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND ) + +GAME( 1996, rungun2, konamigx, gxtype4sd2, type3, konamigx_state, init_konamigx, ROT0, "Konami", "Run and Gun 2 (ver UAA)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, slamdnk2, rungun2, gxtype4sd2, type3, konamigx_state, init_konamigx, ROT0, "Konami", "Slam Dunk 2 (ver JAA)", MACHINE_IMPERFECT_GRAPHICS ) + +GAME( 1996, rushhero, konamigx, gxtype4, type3, konamigx_state, init_konamigx, ROT0, "Konami", "Rushing Heroes (ver UAB)", MACHINE_IMPERFECT_GRAPHICS ) diff --git a/docs/release/src/mame/drivers/model2.cpp b/docs/release/src/mame/drivers/model2.cpp new file mode 100644 index 00000000000..d023da26350 --- /dev/null +++ b/docs/release/src/mame/drivers/model2.cpp @@ -0,0 +1,7042 @@ +// license:BSD-3-Clause +// copyright-holders:R. Belmont, Olivier Galibert, ElSemi, Angelo Salese +/* + Sega Model 2: i960KB + (5x TGP) or (2x SHARC) or (2x TGPx4) + System 24 tilemaps + Custom Sega/Lockheed-Martin rasterization hardware + (68000 + YM3438 + 2x MultiPCM) or (68000 + SCSP) + + Hardware and protection reverse-engineering and general assistance by ElSemi. + MAME driver by R. Belmont, Olivier Galibert, ElSemi and Angelo Salese. + + TODO: + - z-sort, focal distance, color gamma and Mip Mapping still needs to be properly sorted in the renderer; + - sound comms still needs some work (sometimes m68k doesn't get some commands or play them with a delay); + - 2C games needs TGPx4 emulation; + - outputs and artwork (for gearbox indicators); + - clean-ups; + + TODO (per-game issues) + - daytona: crashes when coining it up with master network active + culprit is a wrong command parameter in geo_parse texture data opcode; + - daytona: car glasses doesn't get loaded during gameplay; + - doa, doaa: corrupted sound, eventually becomes silent; + - doa, doaa: Kasumi model has many culled polygons; + - dynamcopc: corrupts palette for 2d (most likely unrelated with the lack of DSP); + - fvipers, schamp: rasterizer has issues displaying some characters @see video/model2.cpp + - fvipers: enables timers, but then irq register is empty, hence it crashes with an "interrupt halt" at POST (regression); + - lastbrnx: uses external DMA port 0 for uploading SHARC program, hook-up might not be 100% right; + - lastbrnx: has wrong graphics, uses several SHARC opcodes that needs to be double checked + (compute_fmul_avg, shift operation 0x11, ALU operation 0x89 (compute_favg)); + - manxtt: no escape from "active motion slider" tutorial (needs analog inputs), + bypass it by entering then exiting service mode; + - manxtt: no bikes are visible (not a z-sort issue!); + - manxtt: course select island map doesn't rotate properly: + timing issue, i960 sends read/write geo addresses to bufferram 0x918000/4 which TGP never reads in time. + - sgt24h: first turn in easy reverse course has ugly rendered mountain in background; + - skytargt: really slow during gameplay (fixed?); + - skytargt: short draw distance (might be down to z-sort); + - srallyc: some 3d elements doesn't show up properly (tree models, last hill in course 1 is often black colored); + - vcop: sound dies at enter initial screen (i.e. after played the game once) (untested); + - vcop: missing 3d at stage select screen (priority?); + - vstriker: stadium ads have terrible colors (they uses the wrong color table, @see video/model2rd.hxx) + + Notes: + - some analog games can be calibrated in service mode via volume control item ... + - ... while in manxtt (maybe others) you calibrate by entering input test, press service + (a blinking > will appear near the item to be calibrated) then keep pressed shift down while + calibrating the analog input (a blinking "setting" will appear). + +====================================================================================================================================== + + Sega Model 2 Feedback Driver Board + ---------------------------------- + + + PCB Layout + ---------- + + SJ25-0207-01 + 838-10646 (Daytona) + 838-11661 (Sega Rally) + |---------------------------------------------| + | 7-SEG-LED 7-SEG-LED | + | | + | 315-5296 315-5296 | + | DSW(8) | + | M6253 MB3759 | + | | + | GAL.IC23 ROM.IC12 | + | | + | Z80 | + |8MHz MB3771 MB3771 8464 | + |---------------------------------------------| + Notes: + Z80 - clock 4.000MHz [8/2] + 8464 - 8k x8 SRAM + ROM.IC12 - EPR-16488A for Daytona + EPR-17891 for Sega Rally + GAL - Lattice GAL16V8B stamped 315-5625 common to both Daytona and Sega Rally + DSW(8) - 8-Position dip switch, all OFF + M6253 - Oki M6253 + 315-5296 - Sega Custom QFP100 + plus several transistors, resistors, a couple of relays and 8 connectors. + + +*/ + +#include "emu.h" +#include "includes/model2.h" + +#include "cpu/i960/i960.h" +#include "cpu/m68000/m68000.h" +#include "cpu/z80/z80.h" +#include "machine/clock.h" +#include "machine/cxd1095.h" +#include "machine/eepromser.h" +#include "machine/mb8421.h" +#include "machine/msm6253.h" +#include "machine/nvram.h" +#include "machine/315_5296.h" +#include "machine/315_5649.h" +#include "machine/model1io.h" +//#include "machine/model1io2.h" +#include "sound/2612intf.h" +#include "video/segaic24.h" +#include "speaker.h" + +//#include "model1io2.lh" + +/* Timers - these count down at 25 MHz and pull IRQ2 when they hit 0 */ +READ32_MEMBER(model2_state::timers_r) +{ + m_maincpu->i960_noburst(); + + // if timer is running, calculate current value + if (m_timerrun[offset]) + { + // get elapsed time, convert to units of 25 MHz + uint32_t cur = (m_timers[offset]->time_elapsed() * 25000000).as_double(); + + // subtract units from starting value + m_timervals[offset] = m_timerorig[offset] - cur; + } + + return m_timervals[offset]; +} + +WRITE32_MEMBER(model2_state::timers_w) +{ + attotime period; + + m_maincpu->i960_noburst(); + COMBINE_DATA(&m_timervals[offset]); + + m_timerorig[offset] = m_timervals[offset]; + period = attotime::from_hz(25000000) * m_timerorig[offset]; + m_timers[offset]->adjust(period); + m_timerrun[offset] = 1; +} + +TIMER_DEVICE_CALLBACK_MEMBER(model2_state::model2_timer_cb) +{ + int tnum = (int)(uintptr_t)ptr; + int bit = tnum + 2; + + if(m_timerrun[tnum] == 0) + return; + + m_timers[tnum]->reset(); + + m_intreq |= (1<<bit); + if(m_intena & 1<<bit) + m_maincpu->set_input_line(I960_IRQ2, ASSERT_LINE); + //printf("%08x %08x (%08x)\n",m_intreq,m_intena,1<<bit); + model2_check_irq_state(); + + m_timervals[tnum] = 0xfffff; + m_timerrun[tnum] = 0; +} + +void model2_state::machine_start() +{ + // initialize custom debugger pool, @see machine/model2.cpp + debug_init(); + + save_item(NAME(m_intreq)); + save_item(NAME(m_intena)); + save_item(NAME(m_coproctl)); + save_item(NAME(m_coprocnt)); + save_item(NAME(m_geoctl)); + save_item(NAME(m_geocnt)); + save_item(NAME(m_ctrlmode)); + save_item(NAME(m_timervals[0])); + save_item(NAME(m_timervals[1])); + save_item(NAME(m_timervals[2])); + save_item(NAME(m_timervals[3])); + save_item(NAME(m_timerrun[0])); + save_item(NAME(m_timerrun[1])); + save_item(NAME(m_timerrun[2])); + save_item(NAME(m_timerrun[3])); + + save_item(NAME(m_geo_write_start_address)); + save_item(NAME(m_geo_read_start_address)); +} + +void model2_tgp_state::machine_start() +{ + model2_state::machine_start(); + + m_copro_fifo_in->setup(16, + [this]() { m_copro_tgp->stall(); }, + [this]() { m_copro_tgp->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); }, + [this]() { m_copro_tgp->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); }, + [ ]() { }, + [ ]() { }); + + m_copro_fifo_out->setup(16, + [this]() { m_maincpu->i960_stall(); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); }, + [this]() { m_copro_tgp->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); }, + [this]() { m_copro_tgp->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); }, + [ ]() { }, + [ ]() { }); +} + +void model2b_state::machine_start() +{ + model2_state::machine_start(); + + m_copro_fifo_in->setup(16, + [ ]() { }, + [ ]() { }, + [ ]() { }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); }, + [this]() { m_copro_adsp->set_flag_input(0, m_copro_fifo_in->is_empty()); }, + [this]() { m_copro_adsp->set_flag_input(0, m_copro_fifo_in->is_empty()); }); + m_copro_fifo_out->setup(16, + [this]() { m_maincpu->i960_stall(); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); }, + [ ]() { }, + [ ]() { }, + [this]() { m_copro_adsp->set_flag_input(1, m_copro_fifo_in->is_full()); }, + [this]() { m_copro_adsp->set_flag_input(1, m_copro_fifo_in->is_full()); }); +} + +void model2c_state::machine_start() +{ + model2_state::machine_start(); + + m_copro_fifo_in->setup(16, + [ ]() { }, + [ ]() { }, + [ ]() { }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); }, + [ ]() { }, + [ ]() { }); + m_copro_fifo_out->setup(16, + [this]() { m_maincpu->i960_stall(); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); }, + [ ]() { }, + [ ]() { }, + [ ]() { }, + [ ]() { }); +} + +void model2_state::machine_reset() +{ + m_intreq = 0; + m_intena = 0; + m_coproctl = 0; + m_coprocnt = 0; + m_geoctl = 0; + m_geocnt = 0; + m_ctrlmode = 0; + + m_timervals[0] = 0xfffff; + m_timervals[1] = 0xfffff; + m_timervals[2] = 0xfffff; + m_timervals[3] = 0xfffff; + + m_timerrun[0] = m_timerrun[1] = m_timerrun[2] = m_timerrun[3] = 0; + + for (int i = 0; i < 4; i++) + m_timers[i]->reset(); + + m_uart->write_cts(0); + + // initialize bufferram to a sane default + // TODO: HW can probably parse this at will somehow ... + for (int i = 0; i < 0x20000/4; i++) + m_bufferram[i] = 0x07800f0f; + + m_copro_fifo_in->clear(); + m_copro_fifo_out->clear(); + m_geo_write_start_address = 0; + m_geo_read_start_address = 0; +} + +void model2_state::reset_model2_scsp() +{ + membank("bank4")->set_base(memregion("samples")->base() + 0x200000); + membank("bank5")->set_base(memregion("samples")->base() + 0x600000); + + // copy the 68k vector table into RAM + memcpy(m_soundram, memregion("audiocpu")->base(), 16); +} + +void model2_tgp_state::machine_reset() +{ + model2_state::machine_reset(); + + // hold TGP in halt until we have code + m_copro_tgp->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); +} + +void model2a_state::machine_reset() +{ + model2_tgp_state::machine_reset(); + reset_model2_scsp(); +} + +void model2b_state::machine_reset() +{ + model2_state::machine_reset(); + reset_model2_scsp(); + + m_copro_adsp->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); + + // set FIFOIN empty flag on SHARC + m_copro_adsp->set_input_line(SHARC_INPUT_FLAG0, ASSERT_LINE); + // clear FIFOOUT buffer full flag on SHARC + m_copro_adsp->set_input_line(SHARC_INPUT_FLAG1, CLEAR_LINE); +} + +void model2c_state::machine_reset() +{ + model2_state::machine_reset(); + reset_model2_scsp(); + + m_copro_tgpx4->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); +} + +WRITE16_MEMBER(model2_state::palette_w) +{ + COMBINE_DATA(&m_palram[offset]); + u16 color = m_palram[offset]; + m_palette->set_pen_color(offset, pal5bit(color >> 0), pal5bit(color >> 5), pal5bit(color >> 10)); +} + +READ16_MEMBER(model2_state::palette_r) +{ + return m_palram[offset]; +} + +WRITE16_MEMBER(model2_state::colorxlat_w) +{ + COMBINE_DATA(&m_colorxlat[offset]); +} + +READ16_MEMBER(model2_state::colorxlat_r) +{ + return m_colorxlat[offset]; +} + +// Apparently original Model 2 doesn't have fifo control? +READ32_MEMBER(model2o_state::fifo_control_2o_r) +{ + return 0xffffffff; +} + +READ32_MEMBER(model2_state::fifo_control_2a_r) +{ + uint32_t r = 0; + + if (m_copro_fifo_out->is_empty()) + { + r |= 1; + } + + // #### 1 if fifo empty, zerogun needs | 0x04 set + // TODO: 0x04 is probably fifo full, zeroguna stalls with a fresh nvram with that enabled? + return r; +// return r | 0x04; +} + +READ32_MEMBER(model2_state::videoctl_r) +{ + uint8_t framenum; + + if(m_render_mode == false) + framenum = (m_screen->frame_number() & 2) << 1; + else + framenum = (m_screen->frame_number() & 1) << 2; + + return (framenum) | (m_videocontrol & 3); +} + +WRITE32_MEMBER(model2_state::videoctl_w) +{ + COMBINE_DATA(&m_videocontrol); +} + +// Coprocessor - Common +READ32_MEMBER(model2_state::copro_prg_r) +{ + return 0xffffffff; +} + +READ32_MEMBER(model2_state::copro_ctl1_r) +{ + return m_coproctl; +} + +WRITE32_MEMBER(model2_state::copro_ctl1_w) +{ + // did hi bit change? + if ((data ^ m_coproctl) == 0x80000000) + { + if (data & 0x80000000) + { + logerror("Start copro upload\n"); + m_coprocnt = 0; + copro_halt(); + } + else + { + logerror("Boot copro, %d dwords\n", m_coprocnt); + copro_boot(); + } + } + + COMBINE_DATA(&m_coproctl); +} + + + +// Coprocessor - TGP +void model2_tgp_state::copro_tgp_prog_map(address_map &map) +{ + map(0x000, 0xfff).ram().share("copro_tgp_program"); +} + +void model2_tgp_state::copro_tgp_data_map(address_map &map) +{ + map(0x0000, 0x00ff).ram(); + map(0x0200, 0x03ff).ram(); +} + +void model2_tgp_state::copro_tgp_bank_map(address_map &map) +{ + map(0x00020, 0x00023).rw(FUNC(model2_tgp_state::copro_sincos_r), FUNC(model2_tgp_state::copro_sincos_w)); + map(0x00024, 0x00027).rw(FUNC(model2_tgp_state::copro_atan_r), FUNC(model2_tgp_state::copro_atan_w)); + map(0x00028, 0x00029).rw(FUNC(model2_tgp_state::copro_inv_r), FUNC(model2_tgp_state::copro_inv_w)); + map(0x0002a, 0x0002b).rw(FUNC(model2_tgp_state::copro_isqrt_r), FUNC(model2_tgp_state::copro_isqrt_w)); + + map(0x10000, 0x1ffff).rw(FUNC(model2_tgp_state::copro_tgp_memory_r), FUNC(model2_tgp_state::copro_tgp_memory_w)); +} + +void model2_tgp_state::copro_tgp_io_map(address_map &map) +{ + map(0x0000, 0xffff).m(m_copro_tgp_bank, FUNC(address_map_bank_device::amap32)); +} + +void model2_tgp_state::copro_tgp_rf_map(address_map &map) +{ + map(0x0, 0x0).nopw(); // leds? busy flag? + map(0x1, 0x1).r(m_copro_fifo_in, FUNC(generic_fifo_u32_device::read)); + map(0x2, 0x2).w(m_copro_fifo_out, FUNC(generic_fifo_u32_device::write)); + map(0x3, 0x3).w(FUNC(model2_tgp_state::copro_tgp_bank_w)); +} + +READ32_MEMBER(model2_tgp_state::copro_tgp_memory_r) +{ + offs_t adr = (m_copro_tgp_bank_reg & 0xff0000) | offset; + + if(adr & 0x800000) { + adr &= (m_copro_data->bytes() >> 2) - 1; + return m_copro_data->as_u32(adr); + } + + if(adr & 0x400000) { + adr &= 0x7fff; + return m_bufferram[adr]; + } + + return 0; +} + +WRITE32_MEMBER(model2_tgp_state::copro_tgp_memory_w) +{ + offs_t adr = (m_copro_tgp_bank_reg & 0xff0000) | offset; + if(adr & 0x400000) { + adr &= 0x7fff; + COMBINE_DATA(&m_bufferram[adr]); + } +} + +WRITE32_MEMBER(model2_tgp_state::copro_tgp_bank_w) +{ + COMBINE_DATA(&m_copro_tgp_bank_reg); + m_copro_tgp_bank->set_bank(m_copro_tgp_bank_reg & 0xc00000 ? 1 : 0); +} + +WRITE32_MEMBER(model2_tgp_state::copro_sincos_w) +{ + COMBINE_DATA(&m_copro_sincos_base); +} + +READ32_MEMBER(model2_tgp_state::copro_sincos_r) +{ + offs_t ang = m_copro_sincos_base + offset * 0x4000; + offs_t index = ang & 0x3fff; + if(ang & 0x4000) + index ^= 0x3fff; + u32 result = m_copro_tgp_tables[index]; + if(ang & 0x8000) + result ^= 0x80000000; + return result; +} + +WRITE32_MEMBER(model2_tgp_state::copro_inv_w) +{ + COMBINE_DATA(&m_copro_inv_base); +} + +READ32_MEMBER(model2_tgp_state::copro_inv_r) +{ + offs_t index = ((m_copro_inv_base >> 9) & 0x3ffe) | (offset & 1); + u32 result = m_copro_tgp_tables[index | 0x8000]; + u8 bexp = (m_copro_inv_base >> 23) & 0xff; + u8 exp = (result >> 23) + (0x7f - bexp); + result = (result & 0x807fffff) | (exp << 23); + if(m_copro_inv_base & 0x80000000) + result ^= 0x80000000; + return result; +} + +WRITE32_MEMBER(model2_tgp_state::copro_isqrt_w) +{ + COMBINE_DATA(&m_copro_isqrt_base); +} + +READ32_MEMBER(model2_tgp_state::copro_isqrt_r) +{ + offs_t index = 0x2000 ^ (((m_copro_isqrt_base>> 10) & 0x3ffe) | (offset & 1)); + u32 result = m_copro_tgp_tables[index | 0xc000]; + u8 bexp = (m_copro_isqrt_base >> 24) & 0x7f; + u8 exp = (result >> 23) + (0x3f - bexp); + result = (result & 0x807fffff) | (exp << 23); + if(!(offset & 1)) + result &= 0x7fffffff; + return result; +} + +WRITE32_MEMBER(model2_tgp_state::copro_atan_w) +{ + COMBINE_DATA(&m_copro_atan_base[offset]); + m_copro_tgp->gpio0_w((m_copro_atan_base[0] & 0x7fffffff) <= (m_copro_atan_base[1] & 0x7fffffff)); +} + +READ32_MEMBER(model2_tgp_state::copro_atan_r) +{ + u8 ie = 0x88 - (m_copro_atan_base[3] >> 23); + + bool s0 = m_copro_atan_base[0] & 0x80000000; + bool s1 = m_copro_atan_base[1] & 0x80000000; + bool s2 = (m_copro_atan_base[0] & 0x7fffffff) <= (m_copro_atan_base[1] & 0x7fffffff); + + offs_t im = m_copro_atan_base[3] & 0x7fffff; + offs_t index = ie <= 0x17 ? (im | 0x800000) >> ie : 0; + if(index == 0x4000) + index = 0x3fff; + + u32 result = m_copro_tgp_tables[index | 0x4000]; + + if(s0 ^ s1 ^ s2) + result >>= 16; + if(s2) + result += 0x4000; + if((s0 && !s2) || (s1 && s2)) + result += 0x8000; + + return result & 0xffff; +} + +WRITE32_MEMBER(model2_tgp_state::copro_function_port_w) +{ + uint32_t d = data & 0x800fffff; + uint32_t a = (offset >> 2) & 0xff; + d |= a << 23; + + m_copro_fifo_in->push(u32(d)); +} + +void model2_tgp_state::copro_halt() +{ + m_copro_tgp->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); +} + +void model2_tgp_state::copro_boot() +{ + m_copro_tgp->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); + m_copro_tgp->pulse_input_line(INPUT_LINE_RESET, attotime::zero); +} + +READ32_MEMBER(model2_tgp_state::copro_fifo_r) +{ + m_maincpu->i960_noburst(); + return m_copro_fifo_out->pop(); +} + +WRITE32_MEMBER(model2_tgp_state::copro_fifo_w) +{ + m_maincpu->i960_noburst(); + if (m_coproctl & 0x80000000) + { + m_copro_tgp_program[m_coprocnt] = data; + m_coprocnt++; + } + else + m_copro_fifo_in->push(u32(data)); +} + + + +// Coprocessor - SHARC + +READ32_MEMBER(model2b_state::copro_sharc_buffer_r) +{ + return m_bufferram[offset & 0x7fff]; +} + +WRITE32_MEMBER(model2b_state::copro_sharc_buffer_w) +{ + m_bufferram[offset & 0x7fff] = data; +} + +void model2b_state::copro_sharc_map(address_map &map) +{ + map(0x0400000, 0x0bfffff).r(m_copro_fifo_in, FUNC(generic_fifo_u32_device::read)); + map(0x0c00000, 0x13fffff).w(m_copro_fifo_out, FUNC(generic_fifo_u32_device::write)); + map(0x1400000, 0x1bfffff).rw(FUNC(model2b_state::copro_sharc_buffer_r), FUNC(model2b_state::copro_sharc_buffer_w)); + map(0x1c00000, 0x1dfffff).rom().region("copro_data", 0); +} + +void model2b_state::copro_halt() +{ +} + +void model2b_state::copro_boot() +{ + m_copro_adsp->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); +} + +READ32_MEMBER(model2b_state::copro_fifo_r) +{ + m_maincpu->i960_noburst(); + return m_copro_fifo_out->pop(); +} + +WRITE32_MEMBER(model2b_state::copro_fifo_w) +{ + m_maincpu->i960_noburst(); + if (m_coproctl & 0x80000000) + { + m_copro_adsp->external_dma_write(m_coprocnt, data & 0xffff); + m_coprocnt++; + } + else + { + m_copro_fifo_in->push(u32(data)); + } +} + +WRITE32_MEMBER(model2b_state::copro_sharc_iop_w) +{ + /* FIXME: clean this mess */ + if ((strcmp(machine().system().name, "schamp" ) == 0) || + (strcmp(machine().system().name, "sfight" ) == 0) || + (strcmp(machine().system().name, "fvipers" ) == 0) || + (strcmp(machine().system().name, "fvipersb" ) == 0) || + (strcmp(machine().system().name, "vstriker" ) == 0) || + (strcmp(machine().system().name, "vstrikero" ) == 0) || + (strcmp(machine().system().name, "gunblade" ) == 0) || + (strcmp(machine().system().name, "von" ) == 0) || + (strcmp(machine().system().name, "vonj" ) == 0) || + (strcmp(machine().system().name, "vonr" ) == 0) || + (strcmp(machine().system().name, "rchase2" ) == 0)) + { + m_copro_adsp->external_iop_write(offset, data); + } + else + { + if(offset == 0x10/4) + { + m_copro_adsp->external_iop_write(offset, data); + return; + } + + if ((m_iop_write_num & 1) == 0) + { + m_iop_data = data & 0xffff; + } + else + { + m_iop_data |= (data & 0xffff) << 16; + m_copro_adsp->external_iop_write(offset, m_iop_data); + } + m_iop_write_num++; + } +} + +WRITE32_MEMBER(model2b_state::copro_function_port_w) +{ + uint32_t d = data & 0x800fffff; + uint32_t a = (offset >> 2) & 0xff; + d |= a << 23; + + m_copro_fifo_in->push(u32(d)); +} + + + +// Coprocessor - TGPx4 +void model2c_state::copro_halt() +{ +} + +void model2c_state::copro_boot() +{ + m_copro_tgpx4->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); +} + +READ32_MEMBER(model2c_state::copro_fifo_r) +{ + m_maincpu->i960_noburst(); + return m_copro_fifo_out->pop(); +} + +WRITE32_MEMBER(model2c_state::copro_fifo_w) +{ + m_maincpu->i960_noburst(); + if (m_coproctl & 0x80000000) + { + if (m_coprocnt & 1) + { + m_copro_tgpx4_program[m_coprocnt / 2] &= 0xffffffffU; + m_copro_tgpx4_program[m_coprocnt / 2] |= u64(data) << 32; + } + else + { + m_copro_tgpx4_program[m_coprocnt / 2] &= 0xffffffff00000000U; + m_copro_tgpx4_program[m_coprocnt / 2] |= data; + } + + m_coprocnt++; + } + else + { + m_copro_fifo_in->push(u32(data)); + } +} + +WRITE32_MEMBER(model2c_state::copro_function_port_w) +{ + uint32_t d = data & 0x800fffff; + uint32_t a = (offset >> 2) & 0xff; + d |= a << 23; + + m_copro_fifo_in->push(u32(d)); +} + +void model2c_state::copro_tgpx4_map(address_map &map) +{ + map(0x00000000, 0x00007fff).ram().share("copro_tgpx4_program"); +} + +void model2c_state::copro_tgpx4_data_map(address_map &map) +{ +// map(0x00000000, 0x000003ff) internal RAM + map(0x00400000, 0x00407fff).ram().share("bufferram").mirror(0x003f8000); + map(0x00800000, 0x008fffff).rom().region("copro_data",0); // ROM data +} + + +/*****************************************************************************/ +/* GEO */ + + +WRITE32_MEMBER(model2_state::geo_ctl1_w) +{ + // did hi bit change? + if ((data ^ m_geoctl) == 0x80000000) + { + if (data & 0x80000000) + { + logerror("Start geo upload\n"); + m_geocnt = 0; + } + else + { + logerror("Boot geo, %d dwords\n", m_geocnt); + } + } + + m_geoctl = data; +} + +void model2_state::push_geo_data(uint32_t data) +{ + //osd_printf_debug("push_geo_data: %08X: %08X\n", 0x900000+m_geo_write_start_address, data); + m_bufferram[m_geo_write_start_address/4] = data; + m_geo_write_start_address += 4; +} + +READ32_MEMBER(model2_state::geo_prg_r) +{ + popmessage("Read from Geometry FIFO at %08x, contact MAMEdev",offset*4); + return 0xffffffff; +} + +WRITE32_MEMBER(model2_state::geo_prg_w) +{ + if (m_geoctl & 0x80000000) + { + //logerror("geo_prg_w: %08X: %08X\n", m_geocnt, data); + m_geocnt++; + } + else + { + //osd_printf_debug("GEO: %08X: push %08X\n", m_geo_write_start_address, data); + push_geo_data(data); + } +} + +READ32_MEMBER(model2_state::geo_r) +{ + int address = offset * 4; + if (address == 0x2008) + { + return m_geo_write_start_address; + } + else if (address == 0x3008) + { + return m_geo_read_start_address; + } + +// fatalerror("geo_r: %08X, %08X\n", address, mem_mask); + logerror("geo_r: PC:%08x - %08X\n", m_maincpu->pc(), address); + + return 0; +} + +WRITE32_MEMBER(model2_state::geo_w) +{ + int address = offset * 4; + + if (address < 0x1000) + { + /*if (data & 0x80000000) + { + int i; + uint32_t a; + osd_printf_debug("GEO: jump to %08X\n", (data & 0xfffff)); + a = (data & 0xfffff) / 4; + for (i=0; i < 4; i++) + { + osd_printf_debug(" %08X: %08X %08X %08X %08X\n", 0x900000+(a*4)+(i*16), + m_bufferram[a+(i*4)+0], m_bufferram[a+(i*4)+1], m_bufferram[a+(i*4)+2], m_bufferram[a+(i*4)+3]); + } + } + else + { + int function = (address >> 4) & 0x3f; + switch (address & 0xf) + { + case 0x0: + { + osd_printf_debug("GEO: function %02X (%08X, %08X)\n", function, address, data); + break; + } + + case 0x4: osd_printf_debug("GEO: function %02X, command length %d\n", function, data & 0x3f); break; + case 0x8: osd_printf_debug("GEO: function %02X, data length %d\n", function, data & 0x7f); break; + } + }*/ + + if (data & 0x80000000) + { + uint32_t r = 0; + r |= data & 0x800fffff; + r |= ((address >> 4) & 0x3f) << 23; + push_geo_data(r); + } + else + { + if ((address & 0xf) == 0) + { + uint32_t r = 0; + r |= data & 0x000fffff; + r |= ((address >> 4) & 0x3f) << 23; + if((address >> 4) & 0xc0) + { + uint8_t function = (address >> 4) & 0x3f; + if(function == 1) + { + r |= ((address>>10)&3)<<29; // Eye Mode, used by Sega Rally on car select + //popmessage("Eye mode %02x? Contact MAMEdev",function); + } + } + push_geo_data(r); + } + } + } + else if (address == 0x1008) + { + //osd_printf_debug("GEO: Write Start Address: %08X\n", data); + m_geo_write_start_address = data & 0xfffff; + } + else if (address == 0x3008) + { + //osd_printf_debug("GEO: Read Start Address: %08X\n", data); + m_geo_read_start_address = data & 0xfffff; + } + else + { + fatalerror("geo_w: %08X = %08X\n", address, data); + } +} + +/*****************************************************************************/ + +READ32_MEMBER(model2_state::irq_request_r) +{ + m_maincpu->i960_noburst(); + + return m_intreq; +} + +READ32_MEMBER(model2_state::irq_enable_r) +{ + m_maincpu->i960_noburst(); + + return m_intena; +} + +WRITE32_MEMBER(model2_state::irq_ack_w) +{ + m_maincpu->i960_noburst(); + + m_intreq &= data; + + model2_check_irqack_state(data ^ 0xffffffff); +} + +WRITE32_MEMBER(model2_state::irq_enable_w) +{ + m_maincpu->i960_noburst(); + + COMBINE_DATA(&m_intena); + model2_check_irq_state(); +} + +void model2_state::model2_check_irq_state() +{ + return; + + /* TODO: vf2 and fvipers hangs with an irq halt on POST, disabled for now */ + const int irq_type[12]= {I960_IRQ0,I960_IRQ1,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ3,I960_IRQ3}; + + for(int i=0;i<12;i++) + { + if (m_intena & (1<<i) && m_intreq & (1<<i)) + { + m_maincpu->set_input_line(irq_type[i], ASSERT_LINE); + return; + } + } +} + +void model2_state::model2_check_irqack_state(uint32_t data) +{ + const int irq_type[12]= {I960_IRQ0,I960_IRQ1,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ3,I960_IRQ3}; + + for(int i=0;i<12;i++) + { + if(data & 1<<i) + m_maincpu->set_input_line(irq_type[i], CLEAR_LINE); + } +} + +/* TODO: rewrite this part. It's a 8251-compatible chip */ +READ32_MEMBER(model2_state::model2_serial_r) +{ + if (offset == 0) + { + u32 result = 0; + if (ACCESSING_BITS_0_7 && (offset == 0)) + result |= m_uart->data_r(); + if (ACCESSING_BITS_16_23 && (offset == 0)) + result |= m_uart->status_r() << 16; + return result; + } + + return 0xffffffff; +} + + +WRITE32_MEMBER(model2_state::model2_serial_w) +{ + if (ACCESSING_BITS_0_7 && (offset == 0)) + { + m_uart->data_w(data & 0xff); + + if (m_scsp.found()) + { + m_scsp->midi_in(data&0xff); + + // give the 68k time to notice + // TODO: 40 usecs is too much for Sky Target + m_maincpu->spin_until_time(attotime::from_usec(10)); + } + } + if (ACCESSING_BITS_16_23 && (offset == 0)) + { + m_uart->control_w((data >> 16) & 0xff); + } +} + + +#ifdef UNUSED_FUNCTION +WRITE32_MEMBER(model2_state::copro_w) +{ + int address = offset * 4; + + if (address < 0x400) + { + int function = (address & 0xfff) >> 4; + switch (address & 0xf) + { + case 0x0: osd_printf_debug("COPRO: function %02X, command %d\n", function, (data >> 23) & 0x3f); break; + case 0x4: osd_printf_debug("COPRO: function %02X, command length %d\n", function, data & 0x3f); break; + case 0x8: osd_printf_debug("COPRO: function %02X, data length %d\n", function, data & 0x7f); break; + } + } + + //osd_printf_debug("COPRO: %08X = %08X\n", offset, data); +} +#endif + +READ32_MEMBER(model2_state::render_mode_r) +{ + return (m_render_unk << 14) | (m_render_mode << 2) | (m_render_test_mode << 0); +} + +WRITE32_MEMBER(model2_state::render_mode_w) +{ + // ---- -x-- (1) 60 Hz mode + // (0) 30 Hz mode - skytargt, desert, vstriker, vcop + // ---- ---x Test Mode (Host can "access memories that are always being reloaded") + // Effectively used by Last Bronx to r/w to the framebuffer + m_render_test_mode = bool(BIT(data,0)); + + m_render_mode = bool(BIT(data,2)); + + // undocumented, unknown purpose + m_render_unk = bool(BIT(data,14)); +// osd_printf_debug("Mode = %08X\n", data); +} + +WRITE32_MEMBER(model2_tgp_state::tex0_w) +{ + if ( (offset & 1) == 0 ) + { + m_textureram0[offset>>1] &= 0xffff0000; + m_textureram0[offset>>1] |= data & 0xffff; + } + else + { + m_textureram0[offset>>1] &= 0x0000ffff; + m_textureram0[offset>>1] |= (data & 0xffff) << 16; + } +} + +WRITE32_MEMBER(model2_tgp_state::tex1_w) +{ + if ( (offset & 1) == 0 ) + { + m_textureram1[offset>>1] &= 0xffff0000; + m_textureram1[offset>>1] |= data & 0xffff; + } + else + { + m_textureram1[offset>>1] &= 0x0000ffff; + m_textureram1[offset>>1] |= (data & 0xffff) << 16; + } +} + +READ16_MEMBER(model2_state::lumaram_r) +{ + return m_lumaram[offset]; +} + +WRITE16_MEMBER(model2_state::lumaram_w) +{ + COMBINE_DATA(&m_lumaram[offset]); +} + +/* Top Skater reads here and discards the result */ +READ8_MEMBER(model2_state::tgpid_r) +{ + unsigned char ID[]={0,'T','A','H',0,'A','K','O',0,'Z','A','K',0,'M','T','K'}; + + return ID[offset]; +} + +READ16_MEMBER(model2_state::fbvram_bankA_r) { return m_fbvramA[offset]; } +READ16_MEMBER(model2_state::fbvram_bankB_r) { return m_fbvramB[offset]; } +WRITE16_MEMBER(model2_state::fbvram_bankA_w) { COMBINE_DATA(&m_fbvramA[offset]); } +WRITE16_MEMBER(model2_state::fbvram_bankB_w) { COMBINE_DATA(&m_fbvramB[offset]); } + +/* common map for all Model 2 versions */ +void model2_state::model2_base_mem(address_map &map) +{ + map(0x00000000, 0x001fffff).rom().nopw(); + + map(0x00500000, 0x005fffff).ram().share("workram"); + + map(0x00800000, 0x00803fff).rw(FUNC(model2_state::geo_r), FUNC(model2_state::geo_w)); + //AM_RANGE(0x00800010, 0x00800013) AM_WRITENOP + //AM_RANGE(0x008000b0, 0x008000b3) AM_WRITENOP + //AM_RANGE(0x00804004, 0x0080400f) AM_WRITENOP // quiet psikyo games + + //AM_RANGE(0x00880000, 0x00883fff) AM_WRITE(copro_w) + + map(0x00900000, 0x0091ffff).mirror(0x60000).ram().share("bufferram"); + + map(0x00980004, 0x00980007).r(FUNC(model2_state::fifo_control_2a_r)); + map(0x0098000c, 0x0098000f).rw(FUNC(model2_state::videoctl_r), FUNC(model2_state::videoctl_w)); + map(0x00980030, 0x0098003f).r(FUNC(model2_state::tgpid_r)); + + map(0x00e00000, 0x00e00037).ram(); // CPU control (wait-states) + map(0x00e80000, 0x00e80003).rw(FUNC(model2_state::irq_request_r), FUNC(model2_state::irq_ack_w)); + map(0x00e80004, 0x00e80007).rw(FUNC(model2_state::irq_enable_r), FUNC(model2_state::irq_enable_w)); + + map(0x00f00000, 0x00f0000f).rw(FUNC(model2_state::timers_r), FUNC(model2_state::timers_w)); + + map(0x01000000, 0x0100ffff).rw("tile", FUNC(segas24_tile_device::tile_r), FUNC(segas24_tile_device::tile_w)).mirror(0x110000); + map(0x01020000, 0x01020003).nopw().mirror(0x100000); // ABSEL, always 0 + map(0x01040000, 0x01040001).w("tile", FUNC(segas24_tile_device::xhout_w)).mirror(0x100000); // Horizontal synchronization register + map(0x01060000, 0x01060001).w("tile", FUNC(segas24_tile_device::xvout_w)).mirror(0x100000); // Vertical synchronization register + map(0x01070000, 0x01070003).nopw().mirror(0x100000); // Video synchronization switch + map(0x01080000, 0x010fffff).rw("tile", FUNC(segas24_tile_device::char_r), FUNC(segas24_tile_device::char_w)).mirror(0x100000); + + map(0x01800000, 0x01803fff).rw(FUNC(model2_state::palette_r), FUNC(model2_state::palette_w)); + map(0x01810000, 0x0181bfff).rw(FUNC(model2_state::colorxlat_r), FUNC(model2_state::colorxlat_w)); + map(0x0181c000, 0x0181c003).w(FUNC(model2_state::model2_3d_zclip_w)); + map(0x01a00000, 0x01a03fff).rw(m_m2comm, FUNC(m2comm_device::share_r), FUNC(m2comm_device::share_w)).mirror(0x10000); // Power Sled access comm.board at 0x01A0XXXX, not sure if really a mirror, or slightly different comm.device + map(0x01a04000, 0x01a04000).rw(m_m2comm, FUNC(m2comm_device::cn_r), FUNC(m2comm_device::cn_w)).mirror(0x10000); + map(0x01a04002, 0x01a04002).rw(m_m2comm, FUNC(m2comm_device::fg_r), FUNC(m2comm_device::fg_w)).mirror(0x10000); + map(0x01d00000, 0x01d03fff).ram().share("backup1"); // Backup sram + map(0x02000000, 0x03ffffff).rom().region("main_data", 0); + + // "extra" data + map(0x06000000, 0x06ffffff).rom().region("main_data", 0x1000000); + + map(0x10000000, 0x101fffff).rw(FUNC(model2_state::render_mode_r), FUNC(model2_state::render_mode_w)); +// AM_RANGE(0x10200000, 0x103fffff) renderer status register + map(0x10400000, 0x105fffff).r(FUNC(model2_state::polygon_count_r)); +// AM_RANGE(0x10600000, 0x107fffff) polygon data ping +// AM_RANGE(0x10800000, 0x109fffff) polygon data pong +// AM_RANGE(0x10a00000, 0x10bfffff) fill memory ping +// AM_RANGE(0x10c00000, 0x10dfffff) fill memory pong + + // format is xGGGGGRRRRRBBBBB (512x400) + map(0x11600000, 0x1167ffff).rw(FUNC(model2_state::fbvram_bankA_r), FUNC(model2_state::fbvram_bankA_w)); // framebuffer A (last bronx title screen) + map(0x11680000, 0x116fffff).rw(FUNC(model2_state::fbvram_bankB_r), FUNC(model2_state::fbvram_bankB_w)); // framebuffer B + + map(0x12800000, 0x1281ffff).rw(FUNC(model2_state::lumaram_r), FUNC(model2_state::lumaram_w)).umask32(0x0000ffff); // polygon "luma" RAM +} + +/* common map for 5881 protection */ +void model2_state::model2_5881_mem(address_map &map) +{ + map(0x01d80000, 0x01d8ffff).ram(); + map(0x01d90000, 0x01d9ffff).m(m_cryptdevice, FUNC(sega_315_5881_crypt_device::iomap_le)); +} + + +//************************************************************************** +// LIGHTGUN +//************************************************************************** + +// Interface board ID: 837-12079 +// ALTERA FLEX + Sega 315-5338A + +READ8_MEMBER( model2_state::lightgun_data_r ) +{ + uint16_t data = m_lightgun_ports[offset >> 1].read_safe(0); + return BIT(offset, 0) ? (data >> 8) : data; +} + +READ8_MEMBER( model2_state::lightgun_mux_r ) +{ + if (m_lightgun_mux < 8) + return lightgun_data_r(space, m_lightgun_mux); + else + return lightgun_offscreen_r(space, 0); +} + +WRITE8_MEMBER( model2_state::lightgun_mux_w ) +{ + m_lightgun_mux = data; +} + +// handles offscreen gun trigger detection here +READ8_MEMBER( model2_state::lightgun_offscreen_r ) +{ + // 5 percent border size + const float BORDER_SIZE = 0.05f; + + // calculate width depending on min/max port value + const int BORDER_P1X = (m_lightgun_ports[1]->field(0x3ff)->maxval() - m_lightgun_ports[1]->field(0x3ff)->minval()) * BORDER_SIZE; + const int BORDER_P1Y = (m_lightgun_ports[0]->field(0x3ff)->maxval() - m_lightgun_ports[0]->field(0x3ff)->minval()) * BORDER_SIZE; + const int BORDER_P2X = (m_lightgun_ports[3]->field(0x3ff)->maxval() - m_lightgun_ports[3]->field(0x3ff)->minval()) * BORDER_SIZE; + const int BORDER_P2Y = (m_lightgun_ports[2]->field(0x3ff)->maxval() - m_lightgun_ports[2]->field(0x3ff)->minval()) * BORDER_SIZE; + + uint16_t data = 0xfffc; + + const uint16_t P1X = m_lightgun_ports[1].read_safe(0); + const uint16_t P1Y = m_lightgun_ports[0].read_safe(0); + const uint16_t P2X = m_lightgun_ports[3].read_safe(0); + const uint16_t P2Y = m_lightgun_ports[2].read_safe(0); + + // border hit test for player 1 and 2 + if (P1X <= (m_lightgun_ports[1]->field(0x3ff)->minval() + BORDER_P1X)) data |= 1; + if (P1X >= (m_lightgun_ports[1]->field(0x3ff)->maxval() - BORDER_P1X)) data |= 1; + if (P1Y <= (m_lightgun_ports[0]->field(0x3ff)->minval() + BORDER_P1Y)) data |= 1; + if (P1Y >= (m_lightgun_ports[0]->field(0x3ff)->maxval() - BORDER_P1Y)) data |= 1; + if (P2X <= (m_lightgun_ports[3]->field(0x3ff)->minval() + BORDER_P2X)) data |= 2; + if (P2X >= (m_lightgun_ports[3]->field(0x3ff)->maxval() - BORDER_P2X)) data |= 2; + if (P2Y <= (m_lightgun_ports[2]->field(0x3ff)->minval() + BORDER_P2Y)) data |= 2; + if (P2Y >= (m_lightgun_ports[2]->field(0x3ff)->maxval() - BORDER_P2Y)) data |= 2; + + return (data >> ((offset & 1)*8)) & 0xff; +} + + +//************************************************************************** +// OUTPUTS +//************************************************************************** + +WRITE8_MEMBER( model2o_state::daytona_output_w ) +{ + // 7------- leader led + // -6------ vr4 led + // --5----- vr3 led + // ---4---- vr2 led + // ----3--- vr1 led + // -----2-- start led + // ------1- coin counter 2 + // -------0 coin counter 1 + + machine().bookkeeping().coin_counter_w(1, BIT(data, 1)); + machine().bookkeeping().coin_counter_w(0, BIT(data, 0)); +} + +WRITE8_MEMBER( model2o_state::desert_output_w ) +{ + // 7------- cannon motor + // -6------ machine gun motor + // --5----- vr1 + // ---4---- vr2 + // ----3--- vr3 + // -----2-- start + // ------1- coin counter 2 + // -------0 coin counter 1 + + machine().bookkeeping().coin_counter_w(1, BIT(data, 1)); + machine().bookkeeping().coin_counter_w(0, BIT(data, 0)); +} + +WRITE8_MEMBER( model2o_state::vcop_output_w ) +{ + // 7654---- unknown (not used?) + // ----32-- start leds (always set together) + // ------1- coin counter 2 + // -------0 coin counter 1 + + machine().bookkeeping().coin_counter_w(1, BIT(~data, 1)); + machine().bookkeeping().coin_counter_w(0, BIT(~data, 0)); +} + + +//************************************************************************** +// I/O BOARD +//************************************************************************** + +// On the real system, another 315-5338A is acting as slave +// and writes the data to the dual port RAM. This isn't +// emulated yet, data just gets written to RAM. + +/* model 2/2a common memory map */ +void model2_tgp_state::model2_tgp_mem(address_map &map) +{ + model2_base_mem(map); + + map(0x00804000, 0x00807fff).rw(FUNC(model2_tgp_state::geo_prg_r), FUNC(model2_tgp_state::geo_prg_w)); + map(0x00880000, 0x00883fff).w(FUNC(model2_tgp_state::copro_function_port_w)); + map(0x00884000, 0x00887fff).rw(FUNC(model2_tgp_state::copro_fifo_r), FUNC(model2_tgp_state::copro_fifo_w)); + + map(0x00980000, 0x00980003).rw(FUNC(model2_tgp_state::copro_ctl1_r), FUNC(model2_tgp_state::copro_ctl1_w)); + map(0x00980008, 0x0098000b).w(FUNC(model2_tgp_state::geo_ctl1_w)); + map(0x009c0000, 0x009cffff).rw(FUNC(model2_tgp_state::model2_serial_r), FUNC(model2_tgp_state::model2_serial_w)); + + map(0x12000000, 0x121fffff).ram().w(FUNC(model2o_state::tex0_w)).mirror(0x200000).share("textureram0"); // texture RAM 0 + map(0x12400000, 0x125fffff).ram().w(FUNC(model2o_state::tex1_w)).mirror(0x200000).share("textureram1"); // texture RAM 1 +} + +/* original Model 2 overrides */ +void model2o_state::model2o_mem(address_map &map) +{ + model2_tgp_mem(map); + + map(0x00200000, 0x0021ffff).ram(); + map(0x00220000, 0x0023ffff).rom().region("maincpu", 0x20000); + map(0x00980004, 0x00980007).r(FUNC(model2o_state::fifo_control_2o_r)); + map(0x01c00000, 0x01c00fff).rw("dpram", FUNC(mb8421_device::right_r), FUNC(mb8421_device::right_w)).umask32(0x00ff00ff); // 2k*8-bit dual port ram + map(0x01c80000, 0x01c80003).rw(FUNC(model2o_state::model2_serial_r), FUNC(model2o_state::model2_serial_w)); +} + +/* Daytona "To The MAXX" PIC protection simulation */ +READ32_MEMBER(model2o_maxx_state::maxx_r) +{ + uint32_t *ROM = (uint32_t *)memregion("maincpu")->base(); + + if (offset <= 0x1f/4) + { + // special + if (mem_mask == 0xffff0000) + { + // 16-bit protection reads + m_maxxstate++; + m_maxxstate &= 0xf; + if (!m_maxxstate) + { + return 0x00070000; + } + else + { + if (m_maxxstate & 0x2) + { + return 0; + } + else + { + return 0x00040000; + } + } + } + else if (mem_mask == 0xffffffff) + { + // 32-bit read + if (offset == 0x22/4) + { + return 0x00ff0000; + } + } + } + + return ROM[offset + (0x040000/4)]; +} + +void model2o_maxx_state::model2o_maxx_mem(address_map &map) +{ + model2o_mem(map); + map(0x00240000, 0x0024ffff).r(FUNC(model2o_maxx_state::maxx_r)); +} + +READ8_MEMBER(model2o_gtx_state::gtx_r) +{ + uint8_t *ROM = memregion("prot_data")->base(); + + if(offset == 0xffffc) // disable protection ROM overlay (fallbacks to data rom?) + m_gtx_state = 2; + else if(offset == 0xff00c || offset == 0xf0003) // enable protection bank 0 + m_gtx_state = 0; + else if(offset == 0xff000) // enable protection bank 1 + m_gtx_state = 1; + + return ROM[m_gtx_state*0x100000+offset]; +} + +void model2o_gtx_state::model2o_gtx_mem(address_map &map) +{ + model2o_mem(map); + map(0x02c00000,0x02cfffff).r(FUNC(model2o_gtx_state::gtx_r)); +} + +/* TODO: read by Sonic the Fighters (bit 1), unknown purpose */ +READ32_MEMBER(model2_state::copro_status_r) +{ + if(m_coprocnt == 0) + return -1; + + return 0; +} + +/* 2A-CRX overrides */ +void model2a_state::model2a_crx_mem(address_map &map) +{ + model2_tgp_mem(map); + + map(0x00200000, 0x0023ffff).ram(); + map(0x01c00000, 0x01c0001f).rw("io", FUNC(sega_315_5649_device::read), FUNC(sega_315_5649_device::write)).umask32(0x00ff00ff); + map(0x01c00040, 0x01c00043).nopw(); + map(0x01c80000, 0x01c80003).rw(FUNC(model2a_state::model2_serial_r), FUNC(model2a_state::model2_serial_w)); +} + +void model2a_state::model2a_5881_mem(address_map &map) +{ + model2a_crx_mem(map); + model2_5881_mem(map); +} + +void model2a_state::model2a_0229_mem(address_map &map) +{ + model2a_crx_mem(map); + model2_0229_mem(map); +} + +/* 2B-CRX overrides */ +void model2b_state::model2b_crx_mem(address_map &map) +{ + model2_base_mem(map); + + map(0x00200000, 0x0023ffff).ram(); + + map(0x00804000, 0x00807fff).rw(FUNC(model2b_state::geo_prg_r), FUNC(model2b_state::geo_prg_w)); + //AM_RANGE(0x00804000, 0x00807fff) AM_READWRITE(geo_sharc_fifo_r, geo_sharc_fifo_w) + //AM_RANGE(0x00840000, 0x00840fff) AM_WRITE(geo_sharc_iop_w) + + map(0x00880000, 0x00883fff).w(FUNC(model2b_state::copro_function_port_w)); + map(0x00884000, 0x00887fff).rw(FUNC(model2b_state::copro_fifo_r), FUNC(model2b_state::copro_fifo_w)); + map(0x008c0000, 0x008c0fff).w(FUNC(model2b_state::copro_sharc_iop_w)); + + map(0x00980000, 0x00980003).rw(FUNC(model2b_state::copro_ctl1_r), FUNC(model2b_state::copro_ctl1_w)); + map(0x00980008, 0x0098000b).w(FUNC(model2b_state::geo_ctl1_w)); + map(0x00980014, 0x00980017).r(FUNC(model2b_state::copro_status_r)); + //AM_RANGE(0x00980008, 0x0098000b) AM_WRITE(geo_sharc_ctl1_w ) + + map(0x009c0000, 0x009cffff).rw(FUNC(model2b_state::model2_serial_r), FUNC(model2b_state::model2_serial_w)); + + map(0x11000000, 0x110fffff).ram().share("textureram0"); // texture RAM 0 (2b/2c) + map(0x11100000, 0x111fffff).ram().share("textureram0"); // texture RAM 0 (2b/2c) + map(0x11200000, 0x112fffff).ram().share("textureram1"); // texture RAM 1 (2b/2c) + map(0x11300000, 0x113fffff).ram().share("textureram1"); // texture RAM 1 (2b/2c) + map(0x11400000, 0x1140ffff).rw(FUNC(model2b_state::lumaram_r), FUNC(model2b_state::lumaram_w)); // polygon "luma" RAM (2b/2c) + map(0x12800000, 0x1281ffff).rw(FUNC(model2b_state::lumaram_r), FUNC(model2b_state::lumaram_w)).umask32(0x0000ffff); // polygon "luma" RAM + + map(0x01c00000, 0x01c0001f).rw("io", FUNC(sega_315_5649_device::read), FUNC(sega_315_5649_device::write)).umask32(0x00ff00ff); + map(0x01c00040, 0x01c00043).nopw(); + map(0x01c80000, 0x01c80003).rw(FUNC(model2b_state::model2_serial_r), FUNC(model2b_state::model2_serial_w)); +} + +void model2b_state::model2b_5881_mem(address_map &map) +{ + model2b_crx_mem(map); + model2_5881_mem(map); +} + +void model2b_state::model2b_0229_mem(address_map &map) +{ + model2b_crx_mem(map); + model2_0229_mem(map); +} + +/* 2C-CRX overrides */ +void model2c_state::model2c_crx_mem(address_map &map) +{ + model2_base_mem(map); + + map(0x00200000, 0x0023ffff).ram(); + + map(0x00804000, 0x00807fff).rw(FUNC(model2c_state::geo_prg_r), FUNC(model2c_state::geo_prg_w)); + map(0x00880000, 0x00883fff).w(FUNC(model2c_state::copro_function_port_w)); + map(0x00884000, 0x00887fff).rw(FUNC(model2c_state::copro_fifo_r), FUNC(model2c_state::copro_fifo_w)); + + map(0x00980000, 0x00980003).rw(FUNC(model2c_state::copro_ctl1_r), FUNC(model2c_state::copro_ctl1_w)); + map(0x00980008, 0x0098000b).w(FUNC(model2c_state::geo_ctl1_w)); + map(0x00980014, 0x00980017).r(FUNC(model2c_state::copro_status_r)); + map(0x009c0000, 0x009cffff).rw(FUNC(model2c_state::model2_serial_r), FUNC(model2c_state::model2_serial_w)); + + map(0x11000000, 0x111fffff).ram().share("textureram0"); // texture RAM 0 (2b/2c) + map(0x11200000, 0x113fffff).ram().share("textureram1"); // texture RAM 1 (2b/2c) + map(0x11400000, 0x1140ffff).rw(FUNC(model2c_state::lumaram_r), FUNC(model2c_state::lumaram_w)); // polygon "luma" RAM (2b/2c) + map(0x12800000, 0x1281ffff).rw(FUNC(model2c_state::lumaram_r), FUNC(model2c_state::lumaram_w)).umask32(0x0000ffff); // polygon "luma" RAM + + map(0x01c00000, 0x01c0001f).rw("io", FUNC(sega_315_5649_device::read), FUNC(sega_315_5649_device::write)).umask32(0x00ff00ff); + map(0x01c80000, 0x01c80003).rw(FUNC(model2c_state::model2_serial_r), FUNC(model2c_state::model2_serial_w)); +} + +void model2c_state::model2c_5881_mem(address_map &map) +{ + model2c_crx_mem(map); + model2_5881_mem(map); +} + + +//************************************************************************** +// DRIVE BOARD +//************************************************************************** + +/* + Rail Chase 2 "Drive I/O BD" documentation + + Aux board 837-11694, Z80 (4Mhz) with program rom EPR-17895 + + commands 0x2* are for device status bits (all of them active low) + + command 0x27 (4 port valve rear cylinder) + ---- --xx Cylinder Position (00 - neutral, 01 - up, 10 - down, 11 - error) + + command 0x29 + ---- -x-- Compressor Motor + ---- --x- Unloader Valve + ---- ---x Compression Valve + + command 0x2a (4 port valve left cylinder) + ---- -x-- Rev Valve + ---- --x- Down Valve + ---- ---x Up Valve + + command 0x2b (4 port valve right cylinder) + ---- -x-- Rev Valve + ---- --x- Down Valve + ---- ---x Up Valve + + command 0x2e + ---- --xx Compression SW (00 - error, 01 - low, 10 - high, 11 - error) + + command 0x2f + ---- x--- Emergency SW + ---- ---x Safety Sensor + + These are all used on network check, probably some specific data port R/Ws + + command 0x3b + command 0xe0 + command 0xd0 + command 0xb0 + command 0x70 + command 0x0e + command 0x0d + command 0x0b + command 0x07 + + Every other write of this controls devices behaviour: + + command 0x4f (left up valve off) + command 0x5b (left down valve off) + command 0x5d (compression valve on) + command 0x5e (left rev valve on) + command 0x5f (left Cylinder reset) + + command 0x6f (right up valve off) + command 0x7b (right down valve off) + command 0x7d (compression valve on) + command 0x7e (right rev valve on) + command 0x7f (right Cylinder reset) + + command 0x84 (reset up/down valves of rear cylinder) + command 0x85 (rear up valve on) + command 0x86 (rear down valve on) + + command 0x8b (compression valve on) + command 0x8d (left rev valve is on) + command 0x8e (right rev valve is on) + command 0x8f (reset 4 port valve left / right cylinders and compression valve) + +*/ + +// simulate this so that it passes the initial checks +READ8_MEMBER( model2_state::rchase2_drive_board_r ) +{ + uint8_t data = 0xff; + + if(m_cmd_data == 0xe0 || m_cmd_data == 0x0e) + data &= ~1; + if(m_cmd_data == 0xd0 || m_cmd_data == 0x0d) + data &= ~2; + if(m_cmd_data == 0xb0 || m_cmd_data == 0x0b) + data &= ~4; + if(m_cmd_data == 0x70 || m_cmd_data == 0x07) + data &= ~8; + + return data; +} + +WRITE8_MEMBER( model2_state::rchase2_drive_board_w ) +{ + m_cmd_data = data; +} + +WRITE8_MEMBER( model2_state::drive_board_w ) +{ + m_driveio_comm_data = data; + m_drivecpu->set_input_line(0, HOLD_LINE); +} + + +//************************************************************************** +// INPUT HANDLING +//************************************************************************** + +WRITE8_MEMBER( model2_state::eeprom_w ) +{ + m_ctrlmode = BIT(data, 0); + + m_eeprom->di_write(BIT(data, 5)); + m_eeprom->clk_write(BIT(data, 7) ? ASSERT_LINE : CLEAR_LINE); + m_eeprom->cs_write(BIT(data, 6) ? ASSERT_LINE : CLEAR_LINE); +} + +READ8_MEMBER( model2_state::in0_r ) +{ + uint8_t data = m_in0->read(); + + if (m_ctrlmode) + return (0xc0) | (m_eeprom->do_read() << 5) | (0x10) | (data & 0x0f); + else + return data; +} + +/* PORT_DIPSETTING( 0x00, "0" ) // 0: neutral + PORT_DIPSETTING( 0x10, "1" ) // 2nd gear + PORT_DIPSETTING( 0x20, "2" ) // 1st gear + PORT_DIPSETTING( 0x30, "3" ) + PORT_DIPSETTING( 0x40, "4" ) + PORT_DIPSETTING( 0x50, "5" ) // 4th gear + PORT_DIPSETTING( 0x60, "6" ) // 3rd gear + PORT_DIPSETTING( 0x70, "7" ) +*/ + +// Used by Sega Rally and Daytona USA, others might be different +CUSTOM_INPUT_MEMBER(model2_state::daytona_gearbox_r) +{ + uint8_t res = m_gears.read_safe(0); + int i; + const uint8_t gearvalue[5] = { 0, 2, 1, 6, 5 }; + + for(i=0;i<5;i++) + { + if(res & 1<<i) + { + m_gearsel = i; + return gearvalue[i]; + } + } + + return gearvalue[m_gearsel]; +} + + +//************************************************************************** +// INPUT PORT DEFINITIONS +//************************************************************************** + +static INPUT_PORTS_START( model2 ) + PORT_START("IN0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_COIN1) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_COIN2) + PORT_SERVICE_NO_TOGGLE(0x04, IP_ACTIVE_LOW) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_SERVICE1) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_START1) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_START2) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(1) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(1) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_PLAYER(1) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_BUTTON4) PORT_PLAYER(1) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_PLAYER(1) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_PLAYER(1) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_PLAYER(1) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_PLAYER(1) + + PORT_START("IN2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_BUTTON4) PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_PLAYER(2) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_PLAYER(2) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_PLAYER(2) +INPUT_PORTS_END + +static INPUT_PORTS_START( ioboard_dipswitches ) + PORT_START("ioboard:dsw1") + PORT_DIPUNUSED_DIPLOC(0x01, 0x01, "DSW1:1") + PORT_DIPUNUSED_DIPLOC(0x02, 0x02, "DSW1:2") + PORT_DIPUNUSED_DIPLOC(0x04, 0x04, "DSW1:3") + PORT_DIPUNUSED_DIPLOC(0x08, 0x08, "DSW1:4") + PORT_DIPUNUSED_DIPLOC(0x10, 0x10, "DSW1:5") + PORT_DIPUNUSED_DIPLOC(0x20, 0x20, "DSW1:6") + PORT_DIPUNUSED_DIPLOC(0x40, 0x40, "DSW1:7") + PORT_DIPUNUSED_DIPLOC(0x80, 0x80, "DSW1:8") + + PORT_START("ioboard:dsw2") + PORT_DIPUNUSED_DIPLOC(0x01, 0x01, "DSW2:1") + PORT_DIPUNUSED_DIPLOC(0x02, 0x02, "DSW2:2") + PORT_DIPUNUSED_DIPLOC(0x04, 0x04, "DSW2:3") + PORT_DIPUNUSED_DIPLOC(0x08, 0x08, "DSW2:4") + PORT_DIPUNUSED_DIPLOC(0x10, 0x10, "DSW2:5") + PORT_DIPUNUSED_DIPLOC(0x20, 0x20, "DSW2:6") + PORT_DIPUNUSED_DIPLOC(0x40, 0x40, "DSW2:7") + PORT_DIPUNUSED_DIPLOC(0x80, 0x80, "DSW2:8") + + PORT_START("ioboard:dsw3") + PORT_DIPUNUSED_DIPLOC(0x01, 0x01, "DSW3:1") + PORT_DIPUNUSED_DIPLOC(0x02, 0x02, "DSW3:2") + PORT_DIPUNUSED_DIPLOC(0x04, 0x04, "DSW3:3") + PORT_DIPUNUSED_DIPLOC(0x08, 0x08, "DSW3:4") + PORT_DIPUNUSED_DIPLOC(0x10, 0x10, "DSW3:5") + PORT_DIPUNUSED_DIPLOC(0x20, 0x20, "DSW3:6") + PORT_DIPUNUSED_DIPLOC(0x40, 0x40, "DSW3:7") + PORT_DIPUNUSED_DIPLOC(0x80, 0x80, "DSW3:8") +INPUT_PORTS_END + +static INPUT_PORTS_START( gears ) + PORT_START("GEARS") // fake to handle gear bits + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_NAME("GEAR N") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_NAME("GEAR 1") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_NAME("GEAR 2") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_NAME("GEAR 3") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_NAME("GEAR 4") +INPUT_PORTS_END + +static INPUT_PORTS_START( daytona ) + PORT_INCLUDE(model2) + PORT_INCLUDE(gears) + + PORT_MODIFY("IN0") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON6) PORT_NAME("VR1 (Red)") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_BUTTON7) PORT_NAME("VR2 (Blue)") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_BUTTON8) PORT_NAME("VR3 (Yellow)") + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON9) PORT_NAME("VR4 (Green)") + PORT_BIT(0x0e, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x70, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_CUSTOM_MEMBER(DEVICE_SELF, model2_state, daytona_gearbox_r, nullptr) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("STEER") + PORT_BIT(0xff, 0x80, IPT_PADDLE) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) + + PORT_START("ACCEL") + PORT_BIT(0xff, 0x00, IPT_PEDAL) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) + + PORT_START("BRAKE") + PORT_BIT(0xff, 0x00, IPT_PEDAL2) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) + + PORT_INCLUDE(ioboard_dipswitches) +INPUT_PORTS_END + +static INPUT_PORTS_START( desert ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN0") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON4) PORT_NAME("VR1 (Blue)") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_BUTTON5) PORT_NAME("VR2 (Green)") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_BUTTON6) PORT_NAME("VR3 (Red)") + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_NAME("Shift") PORT_TOGGLE + PORT_BIT(0x0e, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("Machine Gun") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_NAME("Cannon") + PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("STEER") + PORT_BIT(0xff, 0x80, IPT_PADDLE) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) + + PORT_START("ACCEL") + PORT_BIT(0xff, 0x00, IPT_PEDAL) PORT_SENSITIVITY(60) PORT_KEYDELTA(20) + + PORT_START("BRAKE") + PORT_BIT(0xff, 0x00, IPT_AD_STICK_Y) PORT_SENSITIVITY(60) PORT_KEYDELTA(20) + + PORT_INCLUDE(ioboard_dipswitches) +INPUT_PORTS_END + +static INPUT_PORTS_START( vcop ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(1) PORT_NAME("P1 Trigger") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2) PORT_NAME("P2 Trigger") + PORT_BIT(0xfc, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_DIPNAME(0x02, 0x02, "No Enemies") // I/O board connector CN5 + PORT_DIPSETTING( 0x02, DEF_STR( Off )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_BIT(0xfc, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("P1_X") + PORT_BIT(0x3ff, 0x17c, IPT_LIGHTGUN_X) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_MINMAX(0x083, 0x276) PORT_SENSITIVITY(50) PORT_KEYDELTA(13) PORT_PLAYER(1) + + PORT_START("P1_Y") + PORT_BIT(0x3ff, 0x0e6, IPT_LIGHTGUN_Y) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_MINMAX(0x024, 0x1a9) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(1) + + PORT_START("P2_X") + PORT_BIT(0x3ff, 0x179, IPT_LIGHTGUN_X) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_MINMAX(0x080, 0x273) PORT_SENSITIVITY(50) PORT_KEYDELTA(13) PORT_PLAYER(2) + + PORT_START("P2_Y") + PORT_BIT(0x3ff, 0x0e8, IPT_LIGHTGUN_Y) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_MINMAX(0x027, 0x1a9) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(2) + + PORT_INCLUDE(ioboard_dipswitches) + + PORT_MODIFY("ioboard:dsw1") + PORT_DIPNAME(0x01, 0x01, "Reloading") PORT_DIPLOCATION("DSW1:1") + PORT_DIPSETTING( 0x01, "Normal") + PORT_DIPSETTING( 0x00, "Auto Reload") + PORT_DIPNAME(0x02, 0x02, "Enemy Character") PORT_DIPLOCATION("DSW1:2") + PORT_DIPSETTING( 0x02, "Normal") + PORT_DIPSETTING( 0x00, "Robot") +INPUT_PORTS_END + +INPUT_PORTS_START( vf2 ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(1) PORT_NAME("P1 Punch") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(1) PORT_NAME("P1 Kick") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_PLAYER(1) PORT_NAME("P1 Guard") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2) PORT_NAME("P2 Punch") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(2) PORT_NAME("P2 Kick") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_PLAYER(2) PORT_NAME("P2 Guard") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) +INPUT_PORTS_END + +static INPUT_PORTS_START( manxtt ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN0") + PORT_BIT(0x30, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start / VR") + + PORT_MODIFY("IN1") + PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_CODE(KEYCODE_UP) PORT_NAME("Shift Up") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Shift Down") + PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("THROTTLE") + PORT_BIT(0xff, 0x00, IPT_PEDAL) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) + + PORT_START("BRAKE") + PORT_BIT(0xff, 0x00, IPT_PEDAL2) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) + + PORT_START("BANK") + PORT_BIT(0xff, 0x80, IPT_PADDLE) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_REVERSE +INPUT_PORTS_END + +static INPUT_PORTS_START( srallyc ) + PORT_INCLUDE(model2) + PORT_INCLUDE(gears) + + PORT_MODIFY("IN0") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON6) PORT_NAME("VR") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_START1) + + PORT_MODIFY("IN1") + PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT(0x70, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_CUSTOM_MEMBER(DEVICE_SELF, model2_state, daytona_gearbox_r, nullptr) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN) + + PORT_MODIFY("IN2") + PORT_BIT(0xff, 0x00, IPT_PEDAL3) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_NAME("Hand Brake") + + PORT_START("STEER") + PORT_BIT(0xff, 0x80, IPT_PADDLE) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_NAME("Steering Wheel") + + PORT_START("ACCEL") + PORT_BIT(0xff, 0x00, IPT_PEDAL) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_NAME("Accelerate Pedal") + + PORT_START("BRAKE") + PORT_BIT(0xff, 0x00, IPT_PEDAL2) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_NAME("Brake Pedal") +INPUT_PORTS_END + +static INPUT_PORTS_START( vcop2 ) + PORT_INCLUDE(vcop) + + PORT_MODIFY("IN2") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("P1_X") + PORT_BIT(0x3ff, 0x17f, IPT_LIGHTGUN_X) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_MINMAX(137, 630) PORT_SENSITIVITY(50) PORT_KEYDELTA(13) PORT_PLAYER(1) + + PORT_MODIFY("P1_Y") + PORT_BIT(0x3ff, 0x0e6, IPT_LIGHTGUN_Y) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_MINMAX( 36, 425) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(1) + + PORT_MODIFY("P2_X") + PORT_BIT(0x3ff, 0x17c, IPT_LIGHTGUN_X) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_MINMAX(134, 627) PORT_SENSITIVITY(50) PORT_KEYDELTA(13) PORT_PLAYER(2) + + PORT_MODIFY("P2_Y") + PORT_BIT(0x3ff, 0x0e6, IPT_LIGHTGUN_Y) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_MINMAX( 36, 425) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(2) +INPUT_PORTS_END + +static INPUT_PORTS_START( skytargt ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN0") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_NAME("View Change") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_START1) + + PORT_MODIFY("IN1") + PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("Machine Gun") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_NAME("Missile") + PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN) + + PORT_MODIFY("IN2") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNKNOWN) + + PORT_START("STICKX") + PORT_BIT(0xff, 0x80, IPT_AD_STICK_X) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(30) PORT_KEYDELTA(20) PORT_REVERSE + + PORT_START("STICKY") + PORT_BIT(0xff, 0x80, IPT_AD_STICK_Y) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(30) PORT_KEYDELTA(20) +INPUT_PORTS_END + +INPUT_PORTS_START( doa ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(1) PORT_NAME("P1 Hold") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(1) PORT_NAME("P1 Punch") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_PLAYER(1) PORT_NAME("P1 Kick") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2) PORT_NAME("P2 Hold") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(2) PORT_NAME("P2 Punch") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_PLAYER(2) PORT_NAME("P2 Kick") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) +INPUT_PORTS_END + +static INPUT_PORTS_START( zerogun ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN1") + PORT_BIT(0x0c, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + PORT_BIT(0x0c, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("DSW") + // in service mode, enables scroll check, polygon check, bg check, stage select + PORT_DIPNAME(0x01, 0x01, "Enable Debug Menu") PORT_DIPLOCATION("SW:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW:7") + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW:8") +INPUT_PORTS_END + +static INPUT_PORTS_START( motoraid ) + PORT_INCLUDE(manxtt) + + PORT_MODIFY("IN1") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("Punch") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_NAME("Kick") +INPUT_PORTS_END + +static INPUT_PORTS_START( dynamcop ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(1) PORT_NAME("P1 Punch") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(1) PORT_NAME("P1 Kick") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_PLAYER(1) PORT_NAME("P1 Jump") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2) PORT_NAME("P2 Punch") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(2) PORT_NAME("P2 Kick") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_PLAYER(2) PORT_NAME("P2 Jump") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) +INPUT_PORTS_END + +static INPUT_PORTS_START( pltkids ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN1") + PORT_BIT(0x0c, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + PORT_BIT(0x0c, IP_ACTIVE_LOW, IPT_UNUSED) +INPUT_PORTS_END + +static INPUT_PORTS_START( rchase2 ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(1) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2) + PORT_BIT(0xfc, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("P1_X") + PORT_BIT(0xff, 0x80, IPT_AD_STICK_X) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(50) PORT_KEYDELTA(15) PORT_PLAYER(1) PORT_REVERSE + + PORT_START("P1_Y") + PORT_BIT(0xff, 0x80, IPT_AD_STICK_Y) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(50) PORT_KEYDELTA(15) PORT_PLAYER(1) PORT_REVERSE + + PORT_START("P2_X") + PORT_BIT(0xff, 0x80, IPT_AD_STICK_X) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(50) PORT_KEYDELTA(15) PORT_PLAYER(2) PORT_REVERSE + + PORT_START("P2_Y") + PORT_BIT(0xff, 0x80, IPT_AD_STICK_Y) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(50) PORT_KEYDELTA(15) PORT_PLAYER(2) PORT_REVERSE +INPUT_PORTS_END + +static INPUT_PORTS_START( vstriker ) + PORT_INCLUDE(model2) + + // oddly enough service mode returns standard 1-2-3 layout but actual ingame is 2-3-1 + // also bit 3 repeats bit 2 functionality. + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(1) PORT_NAME("P1 Long Pass") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_PLAYER(1) PORT_NAME("P1 Shoot") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(1) PORT_NAME("P1 Short Pass") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(2) PORT_NAME("P2 Long Pass") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_PLAYER(2) PORT_NAME("P2 Shoot") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2) PORT_NAME("P2 Short Pass") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) +INPUT_PORTS_END + +static INPUT_PORTS_START( gunblade ) + PORT_INCLUDE(rchase2) + + PORT_MODIFY("P1_X") + PORT_BIT(0xff, 0x80, IPT_AD_STICK_X) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(50) PORT_KEYDELTA(15) PORT_PLAYER(1) + + PORT_MODIFY("P2_X") + PORT_BIT(0xff, 0x80, IPT_AD_STICK_X) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(50) PORT_KEYDELTA(15) PORT_PLAYER(2) +INPUT_PORTS_END + +static INPUT_PORTS_START( indy500 ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN0") + PORT_BIT(0x30, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_START1) + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_NAME("View 1 (Zoom In)") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON4) PORT_NAME("View 2 (Zoom Out)") + PORT_BIT(0x0c, IP_ACTIVE_LOW, IPT_UNUSED) + // notice that these are exclusive inputs, also if bit 6 or 7 are enabled then shifting doesn't work + // (i.e. they probably took the gearbox device and modded over it) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_CODE(KEYCODE_UP) PORT_NAME("Shift Up") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Shift Down") + PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("STEER") + PORT_BIT(0xff, 0x80, IPT_PADDLE) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_NAME("Steering Wheel") + + PORT_START("ACCEL") + PORT_BIT(0xff, 0x00, IPT_PEDAL) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_NAME("Gas Pedal") + + PORT_START("BRAKE") + PORT_BIT(0xff, 0x00, IPT_PEDAL2) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_NAME("Brake Pedal") +INPUT_PORTS_END + +static INPUT_PORTS_START( von ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("P1 Left Shot") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_NAME("P1 Left Dash") + PORT_BIT(0x0c, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_DOWN) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_UP) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_RIGHT) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_LEFT) + + PORT_MODIFY("IN2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_NAME("P1 Right Shot") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON4) PORT_NAME("P1 Right Dash") + PORT_BIT(0x0c, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_DOWN) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_UP) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_RIGHT) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_LEFT) +INPUT_PORTS_END + +INPUT_PORTS_START( schamp ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(1) PORT_NAME("P1 Punch") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(1) PORT_NAME("P1 Kick") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_PLAYER(1) PORT_NAME("P1 Barrier") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2) PORT_NAME("P2 Punch") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(2) PORT_NAME("P2 Kick") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_PLAYER(2) PORT_NAME("P2 Barrier") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) +INPUT_PORTS_END + +static INPUT_PORTS_START( sgt24h ) + PORT_INCLUDE(indy500) + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_NAME("View 1") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) +INPUT_PORTS_END + +static INPUT_PORTS_START( dynabb ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN1") + PORT_BIT(0x0c, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + PORT_BIT(0x0c, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("BAT1") + PORT_BIT(0xff, 0x00, IPT_PEDAL) PORT_SENSITIVITY(100) PORT_KEYDELTA(50) PORT_PLAYER(1) PORT_NAME("P1 Bat Swing") + + PORT_START("BAT2") + PORT_BIT(0xff, 0x00, IPT_PEDAL2) PORT_SENSITIVITY(100) PORT_KEYDELTA(50) PORT_PLAYER(2) PORT_NAME("P2 Bat Swing") +INPUT_PORTS_END + +static INPUT_PORTS_START( overrev ) + PORT_INCLUDE(indy500) + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_NAME("View 1") + // optional, enableable when hardware type isn't in "normal (2in1)" mode (overrev) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON4) PORT_NAME("View 2") +INPUT_PORTS_END + +static INPUT_PORTS_START( skisuprg ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN0") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_NAME("Select 3") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON5) PORT_NAME("Zoom In") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("Select 1") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_NAME("Select 2") + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON4) PORT_NAME("Zoom Out") + PORT_BIT(0xfe, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + // TODO: what are these exactly? Enables/disables when all four bits are on + PORT_BIT(0x0f, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT) PORT_NAME("Foot Sensor (R)") + PORT_BIT(0xf0, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT) PORT_NAME("Foot Sensor (L)") + + PORT_START("INCLINING") + PORT_BIT(0xff, 0x80, IPT_AD_STICK_X) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(30) PORT_KEYDELTA(20) PORT_NAME("Inclining") + + PORT_START("SWING") + PORT_BIT(0xff, 0x80, IPT_AD_STICK_Y) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(30) PORT_KEYDELTA(20) PORT_NAME("Swing") +INPUT_PORTS_END + +static INPUT_PORTS_START( waverunr ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN0") + PORT_BIT(0x32, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_START1) + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("View") + PORT_BIT(0xfe, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + // TODO: safety sensor + PORT_BIT(0x07, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_CUSTOM) + PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNUSED) + + // TODO: requires LEFT/RIGHT_AD_STICK in framework + PORT_START("HANDLE") + PORT_BIT(0xff, 0x80, IPT_AD_STICK_X) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(50) PORT_KEYDELTA(15) PORT_NAME("Handle Bar") + + PORT_START("ROLL") + PORT_BIT(0xff, 0x80, IPT_AD_STICK_X) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(50) PORT_KEYDELTA(15) PORT_NAME("Roll") + + PORT_START("THROTTLE") + PORT_BIT(0xff, 0x80, IPT_AD_STICK_Y) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(50) PORT_KEYDELTA(15) PORT_NAME("Throttle Lever") PORT_REVERSE + + PORT_START("PITCH") + PORT_BIT(0xff, 0x80, IPT_AD_STICK_Y) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(50) PORT_KEYDELTA(15) PORT_NAME("Pitch") PORT_REVERSE +INPUT_PORTS_END + +static INPUT_PORTS_START( bel ) + PORT_INCLUDE(gunblade) + + PORT_MODIFY("IN0") + // they reversed these two for some reason + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_SERVICE_NO_TOGGLE(0x08, IP_ACTIVE_LOW ) + + PORT_MODIFY("IN1") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(1) PORT_NAME("P1 Missile") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(2) PORT_NAME("P2 Missile") +INPUT_PORTS_END + +static INPUT_PORTS_START( hotd ) + PORT_INCLUDE(vcop2) + + PORT_MODIFY("P1_X") + PORT_BIT(0x3ff, 0x180, IPT_LIGHTGUN_X) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_MINMAX(173, 596) PORT_SENSITIVITY(50) PORT_KEYDELTA(13) PORT_PLAYER(1) + + PORT_MODIFY("P1_Y") + PORT_BIT(0x3ff, 0x0e9, IPT_LIGHTGUN_Y) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_MINMAX( 87, 380) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(1) + + PORT_MODIFY("P2_X") + PORT_BIT(0x3ff, 0x17b, IPT_LIGHTGUN_X) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_MINMAX(163, 596) PORT_SENSITIVITY(50) PORT_KEYDELTA(13) PORT_PLAYER(2) + + PORT_MODIFY("P2_Y") + PORT_BIT(0x3ff, 0x0e9, IPT_LIGHTGUN_Y) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_MINMAX( 87, 380) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(2) +INPUT_PORTS_END + +static INPUT_PORTS_START( segawski ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN0") + PORT_BIT(0x32, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_BUTTON5) PORT_NAME("Select (Down)") + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON4) PORT_NAME("Set") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_NAME("Select (Up)") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("Pitch Left") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_NAME("Pitch Right") + PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("SLIDE") + PORT_BIT(0xff, 0x80, IPT_AD_STICK_X) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(50) PORT_KEYDELTA(15) PORT_NAME("Slide") +INPUT_PORTS_END + +// TODO: has testable service / test on board buttons +static INPUT_PORTS_START( topskatr ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN0") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON4) PORT_NAME("Select Right") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("Jump Front") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_START1) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_NAME("Select Left") + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_NAME("Jump Tail") + PORT_BIT(0xfe, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) + + // TODO: requires LEFT/RIGHT_AD_STICK in framework + PORT_START("CURVING") + PORT_BIT(0xff, 0x80, IPT_AD_STICK_X) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(50) PORT_KEYDELTA(15) PORT_NAME("Curving") + + PORT_START("SLIDE") + PORT_BIT(0xff, 0x80, IPT_AD_STICK_X) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(50) PORT_KEYDELTA(15) PORT_NAME("Slide") +INPUT_PORTS_END + +static INPUT_PORTS_START( powsled ) + PORT_INCLUDE(model2) + + PORT_MODIFY("IN0") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_SERVICE2) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_BUTTON4) PORT_NAME("Cancel Error") PORT_PLAYER(1) + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("P1 Entry") PORT_PLAYER(1) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_NAME("P1 Call") PORT_PLAYER(1) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("P2 Entry") PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_NAME("P2 Call") PORT_PLAYER(2) + PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_MODIFY("IN2") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("IN3") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_NAME("Cancel Network Check") PORT_PLAYER(1) + PORT_BIT(0xfd, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("P1_R") + PORT_BIT(0xff, 0x00, IPT_PEDAL) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(1) + + PORT_START("P1_L") + PORT_BIT(0xff, 0x00, IPT_PEDAL2) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(1) + + PORT_START("P2_R") + PORT_BIT(0xff, 0x00, IPT_PEDAL) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(2) + + PORT_START("P2_L") + PORT_BIT(0xff, 0x00, IPT_PEDAL2) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(2) +INPUT_PORTS_END + + +/*********************************** + * + * Interrupts + * + **********************************/ + +TIMER_DEVICE_CALLBACK_MEMBER(model2_state::model2_interrupt) +{ + int scanline = param; + + if(scanline == 384) + { + m_intreq |= (1<<0); + if(m_intena & 1<<0) + m_maincpu->set_input_line(I960_IRQ0, ASSERT_LINE); + model2_check_irq_state(); + if (m_m2comm != nullptr) + m_m2comm->check_vint_irq(); + } + else if(scanline == 0) + { + /* From sound to main CPU (TODO: what enables this?) */ + m_intreq |= (1<<10); + if(m_intena & 1<<10) + m_maincpu->set_input_line(I960_IRQ3, ASSERT_LINE); + model2_check_irq_state(); + } +} + +#ifdef UNUSED_FUNCTION +WRITE_LINE_MEMBER(model2_state::sound_ready_w) +{ + if(state) + { + m_intreq |= (1<<10); + if(m_intena & 1<<10) + m_maincpu->set_input_line(I960_IRQ3, ASSERT_LINE); + model2_check_irq_state(); + } +} +#endif + +TIMER_DEVICE_CALLBACK_MEMBER(model2c_state::model2c_interrupt) +{ + int scanline = param; + + if(scanline == 384) + { + m_intreq |= (1<<0); + if(m_intena & 1<<0) + m_maincpu->set_input_line(I960_IRQ0, ASSERT_LINE); + model2_check_irq_state(); + if (m_m2comm != nullptr) + m_m2comm->check_vint_irq(); + } + else if(scanline == 0) + { + m_intreq |= (1<<10); + if(m_intena & 1<<10) + m_maincpu->set_input_line(I960_IRQ3, ASSERT_LINE); + model2_check_irq_state(); + } + #if 0 + else if(scanline == 0) + { + // TODO: irq source? Scroll allocation in dynamcopc? + // it's actually a timer 0 irq, doesn't seem necessary + m_intreq |= (1<<2); + if(m_intena & 1<<2) + m_maincpu->set_input_line(I960_IRQ2, ASSERT_LINE); + model2_check_irq_state(); + } + #endif +} + +/* Model 2 sound board emulation */ + +WRITE16_MEMBER(model2_state::model2snd_ctrl) +{ + // handle sample banking + if (memregion("samples")->bytes() > 0x800000) + { + uint8_t *snd = memregion("samples")->base(); + if (data & 0x20) + { + membank("bank4")->set_base(snd + 0x200000); + membank("bank5")->set_base(snd + 0x600000); + } + else + { + membank("bank4")->set_base(snd + 0x800000); + membank("bank5")->set_base(snd + 0xa00000); + } + } +} + +void model2_state::model2_snd(address_map &map) +{ + map(0x000000, 0x07ffff).ram().share("soundram"); + map(0x100000, 0x100fff).rw(m_scsp, FUNC(scsp_device::read), FUNC(scsp_device::write)); + map(0x400000, 0x400001).w(FUNC(model2_state::model2snd_ctrl)); + map(0x600000, 0x67ffff).rom().region("audiocpu", 0); + map(0x800000, 0x9fffff).rom().region("samples", 0); + map(0xa00000, 0xdfffff).bankr("bank4"); + map(0xe00000, 0xffffff).bankr("bank5"); +} + +void model2_state::scsp_map(address_map &map) +{ + map(0x000000, 0x07ffff).ram().share("soundram"); +} + +WRITE8_MEMBER(model2_state::scsp_irq) +{ + m_audiocpu->set_input_line(offset, data); +} + +/*****************************************************************************/ + +#define VIDEO_CLOCK XTAL(32'000'000) + +void model2_state::model2_timers(machine_config &config) +{ + timer_device &timer0(TIMER(config, "timer0")); + timer0.configure_generic(FUNC(model2_state::model2_timer_cb)); + timer0.set_ptr((void *)(uintptr_t)0); + timer_device &timer1(TIMER(config, "timer1")); + timer1.configure_generic(FUNC(model2_state::model2_timer_cb)); + timer1.set_ptr((void *)(uintptr_t)1); + timer_device &timer2(TIMER(config, "timer2")); + timer2.configure_generic(FUNC(model2_state::model2_timer_cb)); + timer2.set_ptr((void *)(uintptr_t)2); + timer_device &timer3(TIMER(config, "timer3")); + timer3.configure_generic(FUNC(model2_state::model2_timer_cb)); + timer3.set_ptr((void *)(uintptr_t)3); +} + +void model2_state::model2_screen(machine_config &config) +{ + S24TILE(config, m_tiles, 0, 0x3fff); + m_tiles->set_palette(m_palette); + m_tiles->xhout_write_callback().set(FUNC(model2_state::horizontal_sync_w)); + m_tiles->xvout_write_callback().set(FUNC(model2_state::vertical_sync_w)); + + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK); + // TODO: from System 24, might not be accurate for Model 2 + m_screen->set_raw(VIDEO_CLOCK/2, 656, 0/*+69*/, 496/*+69*/, 424, 0/*+25*/, 384/*+25*/); + m_screen->set_screen_update(FUNC(model2_state::screen_update_model2)); + + PALETTE(config, m_palette).set_entries(8192); +} + +void model2_state::model2_scsp(machine_config &config) +{ + M68000(config, m_audiocpu, 45.1584_MHz_XTAL / 4); // SCSP Clock / 2 + m_audiocpu->set_addrmap(AS_PROGRAM, &model2_state::model2_snd); + + SPEAKER(config, "lspeaker").front_left(); + SPEAKER(config, "rspeaker").front_right(); + + SCSP(config, m_scsp, 45.1584_MHz_XTAL / 2); // 45.158MHz XTAL at Video board(Model 2A-CRX) + m_scsp->set_addrmap(0, &model2_state::scsp_map); + m_scsp->irq_cb().set(FUNC(model2_state::scsp_irq)); + m_scsp->add_route(0, "lspeaker", 1.0); + m_scsp->add_route(1, "rspeaker", 1.0); + + I8251(config, m_uart, 8000000); // uPD71051C, clock unknown +// m_uart->rxrdy_handler().set(FUNC(model2_state::sound_ready_w)); +// m_uart->txrdy_handler().set(FUNC(model2_state::sound_ready_w)); + + clock_device &uart_clock(CLOCK(config, "uart_clock", 500000)); // 16 times 31.25MHz (standard Sega/MIDI sound data rate) + uart_clock.signal_handler().set(m_uart, FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append(m_uart, FUNC(i8251_device::write_rxc)); +} + +/* original Model 2 */ +void model2o_state::model2o(machine_config &config) +{ + I960(config, m_maincpu, 25000000); + m_maincpu->set_addrmap(AS_PROGRAM, &model2o_state::model2o_mem); + + TIMER(config, "scantimer").configure_scanline(FUNC(model2_state::model2_interrupt), "screen", 0, 1); + + MB86234(config, m_copro_tgp, 16000000); + m_copro_tgp->set_addrmap(AS_PROGRAM, &model2o_state::copro_tgp_prog_map); + m_copro_tgp->set_addrmap(AS_DATA, &model2o_state::copro_tgp_data_map); + m_copro_tgp->set_addrmap(AS_IO, &model2o_state::copro_tgp_io_map); + m_copro_tgp->set_addrmap(mb86233_device::AS_RF, &model2o_state::copro_tgp_rf_map); + + ADDRESS_MAP_BANK(config, m_copro_tgp_bank, 0); + m_copro_tgp_bank->set_addrmap(0, &model2o_state::copro_tgp_bank_map); + m_copro_tgp_bank->set_endianness(ENDIANNESS_LITTLE); + m_copro_tgp_bank->set_data_width(32); + m_copro_tgp_bank->set_addr_width(17); + m_copro_tgp_bank->set_shift(-2); + m_copro_tgp_bank->set_stride(0x10000); + + GENERIC_FIFO_U32(config, m_copro_fifo_in, 0); + GENERIC_FIFO_U32(config, m_copro_fifo_out, 0); + + NVRAM(config, "backup1", nvram_device::DEFAULT_ALL_1); + + model1io_device &ioboard(SEGA_MODEL1IO(config, "ioboard", 0)); + ioboard.set_default_bios_tag("epr14869c"); + ioboard.read_callback().set("dpram", FUNC(mb8421_device::left_r)); + ioboard.write_callback().set("dpram", FUNC(mb8421_device::left_w)); + ioboard.in_callback<0>().set_ioport("IN0"); + ioboard.in_callback<1>().set_ioport("IN1"); + + MB8421(config, "dpram", 0); + + model2_timers(config); + model2_screen(config); + + SEGAM1AUDIO(config, m_m1audio, 0); + m_m1audio->rxd_handler().set(m_uart, FUNC(i8251_device::write_rxd)); + + I8251(config, m_uart, 8000000); // uPD71051C, clock unknown + m_uart->txd_handler().set(m_m1audio, FUNC(segam1audio_device::write_txd)); + + clock_device &uart_clock(CLOCK(config, "uart_clock", 500000)); // 16 times 31.25MHz (standard Sega/MIDI sound data rate) + uart_clock.signal_handler().set(m_uart, FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append(m_uart, FUNC(i8251_device::write_rxc)); + + M2COMM(config, "m2comm", 0); +} + +READ8_MEMBER(model2_state::driveio_portg_r) +{ + return m_driveio_comm_data; +} + +READ8_MEMBER(model2_state::driveio_porth_r) +{ + return m_driveio_comm_data; +} + +WRITE8_MEMBER(model2_state::driveio_port_w) +{ +// TODO: hook up to the main CPU +// popmessage("%02x",data); +} + +void model2_state::drive_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); + map(0xe000, 0xffff).ram(); +} + +void model2_state::drive_io_map(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x00).nopw(); //watchdog + map(0x20, 0x2f).rw("driveio1", FUNC(sega_315_5296_device::read), FUNC(sega_315_5296_device::write)); + map(0x40, 0x4f).rw("driveio2", FUNC(sega_315_5296_device::read), FUNC(sega_315_5296_device::write)); + map(0x80, 0x83).rw("driveadc", FUNC(msm6253_device::d0_r), FUNC(msm6253_device::address_w)); +} + +void model2_state::sj25_0207_01(machine_config &config) +{ + Z80(config, m_drivecpu, XTAL(8'000'000)/2); // confirmed + m_drivecpu->set_addrmap(AS_PROGRAM, &model2_state::drive_map); + m_drivecpu->set_addrmap(AS_IO, &model2_state::drive_io_map); + m_drivecpu->set_vblank_int("screen", FUNC(model2_state::irq0_line_hold)); + + sega_315_5296_device &driveio1(SEGA_315_5296(config, "driveio1", 0)); // unknown clock + driveio1.out_pd_callback().set(FUNC(model2_state::driveio_port_w)); + driveio1.in_pg_callback().set(FUNC(model2_state::driveio_portg_r)); + driveio1.in_ph_callback().set(FUNC(model2_state::driveio_porth_r)); + + SEGA_315_5296(config, "driveio2", 0); // unknown clock + + MSM6253(config, "driveadc", 0); +} + +void model2o_state::daytona(machine_config &config) +{ + model2o(config); + sj25_0207_01(config); + + model1io_device &ioboard(*subdevice<model1io_device>("ioboard")); + ioboard.drive_write_callback().set(FUNC(model2o_state::drive_board_w)); + ioboard.an_callback<0>().set_ioport("STEER"); + ioboard.an_callback<1>().set_ioport("ACCEL"); + ioboard.an_callback<2>().set_ioport("BRAKE"); + ioboard.output_callback().set(FUNC(model2o_state::daytona_output_w)); +} + +void model2o_maxx_state::daytona_maxx(machine_config &config) +{ + daytona(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &model2o_maxx_state::model2o_maxx_mem); +} + +void model2o_gtx_state::daytona_gtx(machine_config &config) +{ + daytona(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &model2o_gtx_state::model2o_gtx_mem); +} + +void model2o_state::desert(machine_config &config) +{ + model2o(config); + + model1io_device &ioboard(*subdevice<model1io_device>("ioboard")); + ioboard.an_callback<0>().set_ioport("STEER"); + ioboard.an_callback<1>().set_ioport("ACCEL"); + ioboard.an_callback<2>().set_ioport("BRAKE"); + ioboard.output_callback().set(FUNC(model2o_state::desert_output_w)); +} + +void model2o_state::vcop(machine_config &config) +{ + model2o(config); + + config.device_remove("ioboard"); +#if 0 + model1io2_device &ioboard(SEGA_MODEL1IO2(config.replace(), "ioboard", 0)); + ioboard.set_default_bios_tag("epr17181"); + ioboard.read_callback().set("dpram", FUNC(mb8421_device::left_r)); + ioboard.write_callback().set("dpram", FUNC(mb8421_device::left_w)); + ioboard.in_callback<0>().set_ioport("IN0"); + ioboard.in_callback<1>().set_ioport("IN1"); + ioboard.in_callback<2>().set_ioport("IN2"); + ioboard.output_callback().set(FUNC(model2o_state::vcop_output_w)); + ioboard.set_lightgun_p1x_tag("P1_X"); + ioboard.set_lightgun_p1y_tag("P1_Y"); + ioboard.set_lightgun_p2x_tag("P2_X"); + ioboard.set_lightgun_p2y_tag("P2_Y"); + + config.set_default_layout(layout_model1io2); +#endif +} + +/* 2A-CRX */ +void model2a_state::model2a(machine_config &config) +{ + I960(config, m_maincpu, 25000000); + m_maincpu->set_addrmap(AS_PROGRAM, &model2a_state::model2a_crx_mem); + TIMER(config, "scantimer").configure_scanline(FUNC(model2_state::model2_interrupt), "screen", 0, 1); + + MB86234(config, m_copro_tgp, 16000000); + m_copro_tgp->set_addrmap(AS_PROGRAM, &model2a_state::copro_tgp_prog_map); + m_copro_tgp->set_addrmap(AS_DATA, &model2a_state::copro_tgp_data_map); + m_copro_tgp->set_addrmap(AS_IO, &model2a_state::copro_tgp_io_map); + m_copro_tgp->set_addrmap(mb86233_device::AS_RF, &model2a_state::copro_tgp_rf_map); + + ADDRESS_MAP_BANK(config, m_copro_tgp_bank, 0); + m_copro_tgp_bank->set_addrmap(0, &model2a_state::copro_tgp_bank_map); + m_copro_tgp_bank->set_endianness(ENDIANNESS_LITTLE); + m_copro_tgp_bank->set_data_width(32); + m_copro_tgp_bank->set_addr_width(17); + m_copro_tgp_bank->set_shift(-2); + m_copro_tgp_bank->set_stride(0x10000); + + GENERIC_FIFO_U32(config, m_copro_fifo_in, 0); + GENERIC_FIFO_U32(config, m_copro_fifo_out, 0); + + EEPROM_93C46_16BIT(config, "eeprom"); + NVRAM(config, "backup1", nvram_device::DEFAULT_ALL_1); + + sega_315_5649_device &io(SEGA_315_5649(config, "io", 0)); + io.out_pa_callback().set(FUNC(model2a_state::eeprom_w)); + io.in_pb_callback().set(FUNC(model2a_state::in0_r)); + io.in_pc_callback().set_ioport("IN1"); + io.in_pd_callback().set_ioport("IN2"); + + model2_timers(config); + model2_screen(config); + model2_scsp(config); + + M2COMM(config, "m2comm", 0); +} + +void model2a_state::manxtt(machine_config &config) +{ + model2a(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.an_port_callback<0>().set_ioport("THROTTLE"); + io.an_port_callback<1>().set_ioport("BRAKE"); + io.an_port_callback<2>().set_ioport("BANK"); +} + +// Includes a Model 1 Sound board for additional sounds - Deluxe version only +void model2a_state::manxttdx(machine_config &config) +{ + manxtt(config); + + SEGAM1AUDIO(config, m_m1audio, 0); + m_m1audio->rxd_handler().set(m_uart, FUNC(i8251_device::write_rxd)); + + m_uart->txd_handler().set(m_m1audio, FUNC(segam1audio_device::write_txd)); +} + +void model2a_state::srallyc(machine_config &config) +{ + model2a(config); + sj25_0207_01(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.out_pe_callback().set(FUNC(model2a_state::drive_board_w)); + io.an_port_callback<0>().set_ioport("STEER"); + io.an_port_callback<1>().set_ioport("ACCEL"); + io.an_port_callback<2>().set_ioport("BRAKE"); +} + +void model2a_state::vcop2(machine_config &config) +{ + model2a(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.serial_ch2_rd_callback().set(FUNC(model2a_state::lightgun_mux_r)); + io.serial_ch2_wr_callback().set(FUNC(model2a_state::lightgun_mux_w)); +} + +void model2a_state::skytargt(machine_config &config) +{ + model2a(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.an_port_callback<0>().set_ioport("STICKY"); + io.an_port_callback<2>().set_ioport("STICKX"); +} + +uint16_t model2_state::crypt_read_callback(uint32_t addr) +{ + uint16_t dat= m_maincpu->space().read_word((0x1d80000+2*addr)); + return ((dat&0xff00)>>8)|((dat&0x00ff)<<8); +} + +void model2a_state::model2a_5881(machine_config &config) +{ + model2a(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &model2a_state::model2a_5881_mem); + + SEGA315_5881_CRYPT(config, m_cryptdevice, 0); + m_cryptdevice->set_read_cb(FUNC(model2a_state::crypt_read_callback)); +} + +void model2a_state::model2a_0229(machine_config &config) +{ + model2a(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &model2a_state::model2a_0229_mem); + + SEGA315_5838_COMP(config, m_0229crypt, 0); + m_0229crypt->set_addrmap(0, &model2a_state::sega_0229_map); +} + +void model2a_state::zeroguna(machine_config &config) +{ + model2a_5881(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.in_pg_callback().set_ioport("DSW"); +} + +/* 2B-CRX */ +void model2b_state::model2b(machine_config &config) +{ + I960(config, m_maincpu, 25000000); + m_maincpu->set_addrmap(AS_PROGRAM, &model2b_state::model2b_crx_mem); + + TIMER(config, "scantimer", 0).configure_scanline(FUNC(model2_state::model2_interrupt), "screen", 0, 1); + + ADSP21062(config, m_copro_adsp, 40000000); + m_copro_adsp->set_boot_mode(adsp21062_device::BOOT_MODE_HOST); + m_copro_adsp->set_addrmap(AS_DATA, &model2b_state::copro_sharc_map); + + //ADSP21062(config, m_dsp2, 40000000); + //m_dsp2->set_boot_mode(adsp21062_device::BOOT_MODE_HOST); + //m_dsp2->set_addrmap(AS_DATA, &model2b_state::geo_sharc_map); + + config.m_minimum_quantum = attotime::from_hz(18000); + + GENERIC_FIFO_U32(config, m_copro_fifo_in, 0); + GENERIC_FIFO_U32(config, m_copro_fifo_out, 0); + + EEPROM_93C46_16BIT(config, "eeprom"); + NVRAM(config, "backup1", nvram_device::DEFAULT_ALL_1); + + sega_315_5649_device &io(SEGA_315_5649(config, "io", 0)); + io.out_pa_callback().set(FUNC(model2b_state::eeprom_w)); + io.in_pb_callback().set(FUNC(model2b_state::in0_r)); + io.in_pc_callback().set_ioport("IN1"); + io.in_pd_callback().set_ioport("IN2"); + + model2_timers(config); + model2_screen(config); + model2_scsp(config); + + M2COMM(config, "m2comm", 0); +} + +void model2b_state::model2b_5881(machine_config &config) +{ + model2b(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &model2b_state::model2b_5881_mem); + + SEGA315_5881_CRYPT(config, m_cryptdevice, 0); + m_cryptdevice->set_read_cb(FUNC(model2b_state::crypt_read_callback)); +} + +void model2b_state::model2b_0229(machine_config &config) +{ + model2b(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &model2b_state::model2b_0229_mem); + + SEGA315_5838_COMP(config, m_0229crypt, 0); + m_0229crypt->set_addrmap(0, &model2b_state::sega_0229_map); +} + +void model2b_state::indy500(machine_config &config) +{ + model2b(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.an_port_callback<0>().set_ioport("STEER"); + io.an_port_callback<1>().set_ioport("ACCEL"); + io.an_port_callback<2>().set_ioport("BRAKE"); +} + +void model2b_state::powsled(machine_config &config) +{ + model2b(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.in_pe_callback().set_ioport("IN3"); + io.an_port_callback<1>().set_ioport("P1_R"); + io.an_port_callback<3>().set_ioport("P1_L"); + io.an_port_callback<5>().set_ioport("P2_R"); + io.an_port_callback<7>().set_ioport("P2_L"); + // 0 and 2 is Motion AD + + subdevice<m2comm_device>("m2comm")->set_frameoffset(0x180); +} + + +void model2b_state::rchase2_iocpu_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); + map(0x8000, 0x9fff).ram(); +} + +void model2b_state::rchase2_ioport_map(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x07).rw("ioexp", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)); +} + +void model2b_state::rchase2(machine_config &config) +{ + model2b(config); + + z80_device &iocpu(Z80(config, "iocpu", 4000000)); + iocpu.set_addrmap(AS_PROGRAM, &model2b_state::rchase2_iocpu_map); + iocpu.set_addrmap(AS_IO, &model2b_state::rchase2_ioport_map); + + CXD1095(config, "ioexp", 0); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.in_pd_callback().set(FUNC(model2b_state::rchase2_drive_board_r)); + io.out_pe_callback().set(FUNC(model2b_state::rchase2_drive_board_w)); + io.an_port_callback<0>().set_ioport("P2_X"); + io.an_port_callback<1>().set_ioport("P1_X"); + io.an_port_callback<2>().set_ioport("P2_Y"); + io.an_port_callback<3>().set_ioport("P1_Y"); +} + +void model2b_state::gunblade(machine_config &config) +{ + model2b(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.an_port_callback<0>().set_ioport("P1_X"); + io.an_port_callback<1>().set_ioport("P2_X"); + io.an_port_callback<2>().set_ioport("P1_Y"); + io.an_port_callback<3>().set_ioport("P2_Y"); +} + +void model2b_state::dynabb(machine_config &config) +{ + model2b(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.an_port_callback<0>().set_ioport("BAT1"); + io.an_port_callback<1>().set_ioport("BAT2"); +} + +void model2b_state::zerogun(machine_config &config) +{ + model2b_5881(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.in_pg_callback().set_ioport("DSW"); +} + +/* 2C-CRX */ +void model2c_state::model2c(machine_config &config) +{ + I960(config, m_maincpu, 25000000); + m_maincpu->set_addrmap(AS_PROGRAM, &model2c_state::model2c_crx_mem); + TIMER(config, "scantimer").configure_scanline(FUNC(model2c_state::model2c_interrupt), "screen", 0, 1); + + MB86235(config, m_copro_tgpx4, 40000000); + m_copro_tgpx4->set_addrmap(AS_PROGRAM, &model2c_state::copro_tgpx4_map); + m_copro_tgpx4->set_addrmap(AS_DATA, &model2c_state::copro_tgpx4_data_map); + m_copro_tgpx4->set_fifoin_tag(m_copro_fifo_in); + m_copro_tgpx4->set_fifoout0_tag(m_copro_fifo_out); + + GENERIC_FIFO_U32(config, m_copro_fifo_in, 0); + GENERIC_FIFO_U32(config, m_copro_fifo_out, 0); + + EEPROM_93C46_16BIT(config, "eeprom"); + NVRAM(config, "backup1", nvram_device::DEFAULT_ALL_1); + + sega_315_5649_device &io(SEGA_315_5649(config, "io", 0)); + io.out_pa_callback().set(FUNC(model2c_state::eeprom_w)); + io.in_pb_callback().set(FUNC(model2c_state::in0_r)); + io.in_pc_callback().set_ioport("IN1"); + io.in_pd_callback().set_ioport("IN2"); + + model2_timers(config); + model2_screen(config); + model2_scsp(config); + + M2COMM(config, "m2comm", 0); +} + +void model2c_state::skisuprg(machine_config &config) +{ + model2c(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.an_port_callback<0>().set_ioport("SWING"); + io.an_port_callback<1>().set_ioport("INCLINING"); +} + +void model2c_state::stcc(machine_config &config) +{ + model2c(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.an_port_callback<0>().set_ioport("STEER"); + io.an_port_callback<1>().set_ioport("ACCEL"); + io.an_port_callback<2>().set_ioport("BRAKE"); + + DSBZ80(config, m_dsbz80, 0); + m_dsbz80->add_route(0, "lspeaker", 1.0); + m_dsbz80->add_route(1, "rspeaker", 1.0); + + m_uart->txd_handler().set(m_dsbz80, FUNC(dsbz80_device::write_txd)); +} + +void model2c_state::waverunr(machine_config &config) +{ + model2c(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.an_port_callback<0>().set_ioport("HANDLE"); + io.an_port_callback<1>().set_ioport("ROLL"); + io.an_port_callback<2>().set_ioport("THROTTLE"); + io.an_port_callback<3>().set_ioport("PITCH"); +} + +void model2c_state::bel(machine_config &config) +{ + model2c(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.an_port_callback<0>().set_ioport("P1_X"); + io.an_port_callback<1>().set_ioport("P2_X"); + io.an_port_callback<2>().set_ioport("P1_Y"); + io.an_port_callback<3>().set_ioport("P2_Y"); +} + +void model2c_state::hotd(machine_config &config) +{ + model2c(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.serial_ch2_rd_callback().set(FUNC(model2c_state::lightgun_mux_r)); + io.serial_ch2_wr_callback().set(FUNC(model2c_state::lightgun_mux_w)); +} + +void model2c_state::model2c_5881(machine_config &config) +{ + model2c(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &model2c_state::model2c_5881_mem); + + SEGA315_5881_CRYPT(config, m_cryptdevice, 0); + m_cryptdevice->set_read_cb(FUNC(model2c_state::crypt_read_callback)); +} + +void model2c_state::overrev2c(machine_config &config) +{ + model2c(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.an_port_callback<0>().set_ioport("STEER"); + io.an_port_callback<1>().set_ioport("ACCEL"); + io.an_port_callback<2>().set_ioport("BRAKE"); +} + +void model2c_state::segawski(machine_config &config) +{ + model2c(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.an_port_callback<0>().set_ioport("SLIDE"); +} + +void model2c_state::topskatr(machine_config &config) +{ + model2c(config); + + sega_315_5649_device &io(*subdevice<sega_315_5649_device>("io")); + io.an_port_callback<0>().set_ioport("CURVING"); + io.an_port_callback<1>().set_ioport("SLIDE"); +} + + +/* ROM definitions */ + +/* +(info from 2a) + +The smt ROMs are located on the CPU board and are labelled.... +OPR-14742A \ +OPR-14743A / Linked to 315-5674 +OPR-14744 \ +OPR-14745 / Linked to 315-5679B +OPR-14746 \ +OPR-14747 / Linked to 315-5679B + +*/ + +// TODO: roms 58/59 and 62/63 aren't really used so far, actually they should be 32_word loaded too? +// the 'a' versions have the atan table fixed compared to model 1 +#define MODEL2_CPU_BOARD \ + ROM_REGION32_LE( 0x40000, "copro_tgp_tables", 0 ) \ + ROM_LOAD32_WORD("opr-14742a.45", 0x000000, 0x20000, CRC(90c6b117) SHA1(f46429fffcee17d056f56d5fe035a33f1fd6c27e) ) \ + ROM_LOAD32_WORD("opr-14743a.46", 0x000002, 0x20000, CRC(ae7f446b) SHA1(5b9f1fc47caf21e061e930c0d72804e4ec8c7bca) ) \ + \ + ROM_REGION32_LE( 0x80000, "other_data", 0 ) \ + /* 1/x table */ \ + ROM_LOAD32_WORD("opr-14744.58", 0x000000, 0x20000, CRC(730ea9e0) SHA1(651f1db4089a400d073b19ada299b4b08b08f372) ) \ + ROM_LOAD32_WORD("opr-14745.59", 0x000002, 0x20000, CRC(4c934d96) SHA1(e3349ece0e47f684d61ad11bfea4a90602287350) ) \ + /* 1/sqrt(x) table */ \ + ROM_LOAD32_WORD("opr-14746.62", 0x040000, 0x20000, CRC(2a266cbd) SHA1(34e047a93459406c22acf4c25089d1a4955f94ca) ) \ + ROM_LOAD32_WORD("opr-14747.63", 0x040002, 0x20000, CRC(a4ad5e19) SHA1(7d7ec300eeb9a8de1590011e37108688c092f329) ) +/* +These are smt ROMs found on Sega Model 2A Video board +They are linked to a QFP208 IC labelled 315-5645 +*/ + +// TODO: are these present on model2o too? +// 1/(1+x) table, 0.19 input, 1.23 output (bottom 4 bits zero though, and first bit always 1, so 19 real bits) +#define MODEL2A_VID_BOARD \ + ROM_REGION32_LE( 0x200000, "video_unk", ROMREGION_ERASE00 ) \ + ROM_LOAD32_BYTE("mpr-16310.15", 0x000000, 0x80000, CRC(c078a780) SHA1(0ad5b49774172743e2708b7ca4c061acfe10957a) ) \ + ROM_LOAD32_BYTE("mpr-16311.16", 0x000001, 0x80000, CRC(452a492b) SHA1(88c2f6c2dbfd0c1b39a7bf15c74455fb68c7274e) ) \ + ROM_LOAD32_BYTE("mpr-16312.14", 0x000002, 0x80000, CRC(a25fef5b) SHA1(c6a37856b97f5bc4996cb6b66209f47af392cc38) ) + +/* Is there an undumped Zero Gunner with program roms EPR-20292 & EPR-20293? Numbering would suggest so, Japan Model2C or Model2A US? */ +ROM_START( zeroguna ) /* Zero Gunner (Export), Model 2A */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-20437.12", 0x000000, 0x080000, CRC(fad30cc0) SHA1(5c6222e07594b4be59b5095f7cc0a164d5895306) ) + ROM_LOAD32_WORD("epr-20438.13", 0x000002, 0x080000, CRC(ca364408) SHA1(4672ebdd7d9ccab5e107fda9d322b70583246c7a) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-20296.11", 0x000000, 0x400000, CRC(072d8a5e) SHA1(7f69c90dd3c3e6e522d1065b3c4b09434cb4e634) ) + ROM_LOAD32_WORD("mpr-20297.12", 0x000002, 0x400000, CRC(ba6a825b) SHA1(670a86c3a1a78550c760cc66c0a6181928fb9054) ) + ROM_LOAD32_WORD("mpr-20294.9", 0x800000, 0x400000, CRC(a0bd1474) SHA1(c0c032adac69bd545e3aab481878b08f3c3edab8) ) + ROM_LOAD32_WORD("mpr-20295.10", 0x800002, 0x400000, CRC(c548cced) SHA1(d34f2fc9b4481c75a6824aa4bdd3f1884188d35b) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) (COPRO socket) + + ROM_REGION( 0x800000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-20298.17", 0x000000, 0x400000, CRC(8ab782fc) SHA1(595f6fc2e9c58ce9763d51798ceead8d470f0a33) ) + ROM_LOAD32_WORD("mpr-20299.21", 0x000002, 0x400000, CRC(90e20cdb) SHA1(730d58286fb7e91aa4128dc208b0f60eb3becc78) ) + + ROM_REGION( 0x400000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-20301.27", 0x000000, 0x200000, CRC(52010fb2) SHA1(8dce67c6f9e48d749c64b11d4569df413dc40e07) ) + ROM_LOAD32_WORD("mpr-20300.25", 0x000002, 0x200000, CRC(6f042792) SHA1(75db68e57ec3fbc7af377342eef81f26fae4e1c4) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-20302.31", 0x000000, 0x080000, CRC(44ff50d2) SHA1(6ffec81042fd5708e8a5df47b63f9809f93bf0f8) ) + + ROM_REGION16_BE( 0x400000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-20303.32", 0x000000, 0x200000, CRC(c040973f) SHA1(57a496c5dcc1a3931b6e41bf8d41e45d6dac0c31) ) + ROM_LOAD16_WORD_SWAP("mpr-20304.33", 0x200000, 0x200000, CRC(6decfe83) SHA1(d73adafceff2f1776c93e53bd5677d67f1c2c08f) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD + + // 1997 317-5038-COM Model 2 + ROM_PARAMETER( ":315_5881:key", "042c0d13" ) +ROM_END + +ROM_START( zerogunaj ) /* Zero Gunner (Japan), Model 2A - Sega game ID# 833-11341, Sega ROM board ID# 834-11342 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-20288.12", 0x000000, 0x080000, CRC(162305d5) SHA1(c0d67fbb8f89daacd32bbc1ad0d55a73b60016d8) ) + ROM_LOAD32_WORD("epr-20289.13", 0x000002, 0x080000, CRC(b5acb940) SHA1(e4c66c6bc9d5433b76ea12cf625fc359439144bb) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-20296.11", 0x000000, 0x400000, CRC(072d8a5e) SHA1(7f69c90dd3c3e6e522d1065b3c4b09434cb4e634) ) + ROM_LOAD32_WORD("mpr-20297.12", 0x000002, 0x400000, CRC(ba6a825b) SHA1(670a86c3a1a78550c760cc66c0a6181928fb9054) ) + ROM_LOAD32_WORD("mpr-20294.9", 0x800000, 0x400000, CRC(a0bd1474) SHA1(c0c032adac69bd545e3aab481878b08f3c3edab8) ) + ROM_LOAD32_WORD("mpr-20295.10", 0x800002, 0x400000, CRC(c548cced) SHA1(d34f2fc9b4481c75a6824aa4bdd3f1884188d35b) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x800000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-20298.17", 0x000000, 0x400000, CRC(8ab782fc) SHA1(595f6fc2e9c58ce9763d51798ceead8d470f0a33) ) + ROM_LOAD32_WORD("mpr-20299.21", 0x000002, 0x400000, CRC(90e20cdb) SHA1(730d58286fb7e91aa4128dc208b0f60eb3becc78) ) + + ROM_REGION( 0x400000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-20301.27", 0x000000, 0x200000, CRC(52010fb2) SHA1(8dce67c6f9e48d749c64b11d4569df413dc40e07) ) + ROM_LOAD32_WORD("mpr-20300.25", 0x000002, 0x200000, CRC(6f042792) SHA1(75db68e57ec3fbc7af377342eef81f26fae4e1c4) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-20302.31", 0x000000, 0x080000, CRC(44ff50d2) SHA1(6ffec81042fd5708e8a5df47b63f9809f93bf0f8) ) + + ROM_REGION16_BE( 0x400000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-20303.32", 0x000000, 0x200000, CRC(c040973f) SHA1(57a496c5dcc1a3931b6e41bf8d41e45d6dac0c31) ) + ROM_LOAD16_WORD_SWAP("mpr-20304.33", 0x200000, 0x200000, CRC(6decfe83) SHA1(d73adafceff2f1776c93e53bd5677d67f1c2c08f) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD + + // 1997 317-5038-COM Model 2 + ROM_PARAMETER( ":315_5881:key", "042c0d13" ) +ROM_END + +ROM_START( zerogun ) /* Zero Gunner (Export), Model 2B */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-20439.15", 0x000000, 0x080000, CRC(10125381) SHA1(1e178e6bd2b1312cd6290f1be4b386f520465836) ) + ROM_LOAD32_WORD("epr-20440.16", 0x000002, 0x080000, CRC(ce872747) SHA1(82bf138a42c659b675b14e41d526b1628fb46ae3) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-20296.11", 0x000000, 0x400000, CRC(072d8a5e) SHA1(7f69c90dd3c3e6e522d1065b3c4b09434cb4e634) ) + ROM_LOAD32_WORD("mpr-20297.12", 0x000002, 0x400000, CRC(ba6a825b) SHA1(670a86c3a1a78550c760cc66c0a6181928fb9054) ) + ROM_LOAD32_WORD("mpr-20294.9", 0x800000, 0x400000, CRC(a0bd1474) SHA1(c0c032adac69bd545e3aab481878b08f3c3edab8) ) + ROM_LOAD32_WORD("mpr-20295.10", 0x800002, 0x400000, CRC(c548cced) SHA1(d34f2fc9b4481c75a6824aa4bdd3f1884188d35b) ) + + ROM_REGION( 0x800000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-20298.17", 0x000000, 0x400000, CRC(8ab782fc) SHA1(595f6fc2e9c58ce9763d51798ceead8d470f0a33) ) + ROM_LOAD32_WORD("mpr-20299.21", 0x000002, 0x400000, CRC(90e20cdb) SHA1(730d58286fb7e91aa4128dc208b0f60eb3becc78) ) + + ROM_REGION( 0x400000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-20301.27", 0x000000, 0x200000, CRC(52010fb2) SHA1(8dce67c6f9e48d749c64b11d4569df413dc40e07) ) + ROM_LOAD32_WORD("mpr-20300.25", 0x000002, 0x200000, CRC(6f042792) SHA1(75db68e57ec3fbc7af377342eef81f26fae4e1c4) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-20302.31", 0x000000, 0x080000, CRC(44ff50d2) SHA1(6ffec81042fd5708e8a5df47b63f9809f93bf0f8) ) + + ROM_REGION16_BE( 0x400000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-20303.32", 0x000000, 0x200000, CRC(c040973f) SHA1(57a496c5dcc1a3931b6e41bf8d41e45d6dac0c31) ) + ROM_LOAD16_WORD_SWAP("mpr-20304.33", 0x200000, 0x200000, CRC(6decfe83) SHA1(d73adafceff2f1776c93e53bd5677d67f1c2c08f) ) + + // 1997 317-5038-COM Model 2 + ROM_PARAMETER( ":315_5881:key", "042c0d13" ) +ROM_END + +ROM_START( zerogunj ) /* Zero Gunner (Japan), Model 2B */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-20290.15", 0x000000, 0x080000, CRC(9ce3ad21) SHA1(812ab45cc9e2920e74e58937d1826774f3f54183) ) + ROM_LOAD32_WORD("epr-20291.16", 0x000002, 0x080000, CRC(7267a03d) SHA1(a7216914ee7535fa1856cb19bc05c89948a93c89) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-20296.11", 0x000000, 0x400000, CRC(072d8a5e) SHA1(7f69c90dd3c3e6e522d1065b3c4b09434cb4e634) ) + ROM_LOAD32_WORD("mpr-20297.12", 0x000002, 0x400000, CRC(ba6a825b) SHA1(670a86c3a1a78550c760cc66c0a6181928fb9054) ) + ROM_LOAD32_WORD("mpr-20294.9", 0x800000, 0x400000, CRC(a0bd1474) SHA1(c0c032adac69bd545e3aab481878b08f3c3edab8) ) + ROM_LOAD32_WORD("mpr-20295.10", 0x800002, 0x400000, CRC(c548cced) SHA1(d34f2fc9b4481c75a6824aa4bdd3f1884188d35b) ) + + ROM_REGION( 0x800000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-20298.17", 0x000000, 0x400000, CRC(8ab782fc) SHA1(595f6fc2e9c58ce9763d51798ceead8d470f0a33) ) + ROM_LOAD32_WORD("mpr-20299.21", 0x000002, 0x400000, CRC(90e20cdb) SHA1(730d58286fb7e91aa4128dc208b0f60eb3becc78) ) + + ROM_REGION( 0x400000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-20301.27", 0x000000, 0x200000, CRC(52010fb2) SHA1(8dce67c6f9e48d749c64b11d4569df413dc40e07) ) + ROM_LOAD32_WORD("mpr-20300.25", 0x000002, 0x200000, CRC(6f042792) SHA1(75db68e57ec3fbc7af377342eef81f26fae4e1c4) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-20302.31", 0x000000, 0x080000, CRC(44ff50d2) SHA1(6ffec81042fd5708e8a5df47b63f9809f93bf0f8) ) + + ROM_REGION16_BE( 0x400000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-20303.32", 0x000000, 0x200000, CRC(c040973f) SHA1(57a496c5dcc1a3931b6e41bf8d41e45d6dac0c31) ) + ROM_LOAD16_WORD_SWAP("mpr-20304.33", 0x200000, 0x200000, CRC(6decfe83) SHA1(d73adafceff2f1776c93e53bd5677d67f1c2c08f) ) + + // 1997 317-5038-COM Model 2 + ROM_PARAMETER( ":315_5881:key", "042c0d13" ) +ROM_END + +ROM_START( gunblade ) /* Gunblade NY Revision A, Model 2B, Sega game ID# 833-12562 GUN BLADE, Sega ROM board ID# 834-12563 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-18988a.15", 0x000000, 0x080000, CRC(f63f1ad2) SHA1(fcfb0a4691cd7d66168c421e4e1694ecaea56ab2) ) + ROM_LOAD32_WORD("epr-18989a.16", 0x000002, 0x080000, CRC(c1c84d65) SHA1(92bffbf1250c53499c37a53f9e2a054fc7bf256f) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-18974.11", 0x000000, 0x400000, CRC(e29ecaff) SHA1(dcdfe9f59158cec2f02b213ee13f5e40cdb92e55) ) + ROM_LOAD32_WORD("mpr-18975.12", 0x000002, 0x400000, CRC(d8187582) SHA1(34a0b32eeed1a9f41bca8b9261851881b2ba79f2) ) + ROM_LOAD32_WORD("mpr-18976.9", 0x800000, 0x400000, CRC(c95c15eb) SHA1(892063e91b2ed20e0600d4b188da1e9f45a19692) ) + ROM_LOAD32_WORD("mpr-18977.10", 0x800002, 0x400000, CRC(db8f5b6f) SHA1(c11d2c9e1e215aa7b2ebb777639c8cd651901f52) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) + ROM_LOAD32_WORD("mpr-18986.29", 0x000000, 0x400000, CRC(04820f7b) SHA1(5eb6682399b358d77658d82e612b02b724e3f3e1) ) + ROM_LOAD32_WORD("mpr-18987.30", 0x000002, 0x400000, CRC(2419367f) SHA1(0a04a1049d2da486dc9dbb97b383bd24259b78c8) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-18980.17", 0x000000, 0x400000, CRC(22345534) SHA1(7b8bdcfe88953ce1b2d75af2ce4712ab6507e2cf) ) + ROM_LOAD32_WORD("mpr-18981.21", 0x000002, 0x400000, CRC(2544a33d) SHA1(a76193f70adb6abeba02328b290af5cca47d4e25) ) + ROM_LOAD32_WORD("mpr-18982.18", 0x800000, 0x400000, CRC(d0a92b2a) SHA1(95404baed88cc95b75ff9b9084d09622961d3e57) ) + ROM_LOAD32_WORD("mpr-18983.22", 0x800002, 0x400000, CRC(1b4af982) SHA1(550f8248699b9267da7d2e64002be56972381714) ) + + ROM_REGION( 0x800000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-18985.27", 0x000000, 0x400000, CRC(ad6166e3) SHA1(2c487fb743730cacf92dbea952b1efada0f073df) ) + ROM_LOAD32_WORD("mpr-18984.25", 0x000002, 0x400000, CRC(756f6f37) SHA1(095964de773f515d64d65dbc8f8ef9bae97e5ba9) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-18990.31", 0x000000, 0x080000, CRC(02b1b0d1) SHA1(759b4683dc7149e04f41ddac7bd395e8d07ea858) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-18978.32", 0x000000, 0x400000, CRC(0f78b3e3) SHA1(6c2cd6236cb001bb8d487a9b1e9907519dc43daa) ) + ROM_LOAD16_WORD_SWAP("mpr-18979.34", 0x400000, 0x400000, CRC(f13ea36f) SHA1(a8165116b5e07e031ff960201dd8c9a441544961) ) +ROM_END + +ROM_START( vf2 ) /* Virtua Fighter 2 Version 2.1, Model 2A */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-18385.12", 0x000000, 0x020000, CRC(78ed2d41) SHA1(471c19389ceeec6138107dd81863320bd4825327) ) + ROM_LOAD32_WORD( "epr-18386.13", 0x000002, 0x020000, CRC(3418f428) SHA1(0f51e389e13efc172a26471331a60c459ad43c38) ) + ROM_LOAD32_WORD( "epr-18387.14", 0x040000, 0x020000, CRC(124a8453) SHA1(26fb787451824fc6060724e37fe0ba6bb66796cb) ) + ROM_LOAD32_WORD( "epr-18388.15", 0x040002, 0x020000, CRC(8d347980) SHA1(da79e51ad501b9560c4ed7cf1ec768daad93efe0) ) + + ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-17560.10", 0x000000, 0x200000, CRC(d1389864) SHA1(88e9a8b6b0f58c96957015179e7ff10f837040e6) ) + ROM_LOAD32_WORD( "mpr-17561.11", 0x000002, 0x200000, CRC(b98d0101) SHA1(e154877380b9250d8119dd4c14ba306c7b337dcd) ) + ROM_LOAD32_WORD( "mpr-17558.8", 0x400000, 0x200000, CRC(4b15f5a6) SHA1(9a34724958fef9b49eae39c6ea136e0cf532154b) ) + ROM_LOAD32_WORD( "mpr-17559.9", 0x400002, 0x200000, CRC(d3264de6) SHA1(2f094ff0b95bf1cd5c283414634ea9597204d374) ) + ROM_LOAD32_WORD( "mpr-17566.6", 0x800000, 0x200000, CRC(fb41ef98) SHA1(ad4d1ba5e5b39b2d87105ae80750284867aa4ed3) ) + ROM_LOAD32_WORD( "mpr-17567.7", 0x800002, 0x200000, CRC(c3396922) SHA1(7e0700ded530e4eb58e9a68cdb92791284c91431) ) + ROM_LOAD32_WORD( "mpr-17564.4", 0xc00000, 0x200000, CRC(d8062489) SHA1(57666b6937f79bb65c43ed02b04a454882d01e61) ) + ROM_LOAD32_WORD( "mpr-17565.5", 0xc00002, 0x200000, CRC(0517c6e9) SHA1(d9ba93998286713758385033119416714674c8d8) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-17554.16", 0x000000, 0x200000, CRC(27896d82) SHA1(c0624e58de2e427465daaa10dbb02ea2a1fd0f1b) ) + ROM_LOAD32_WORD( "mpr-17548.20", 0x000002, 0x200000, CRC(c95facc2) SHA1(09d19abe5d75a335df7510df8abb2d4425159cdf) ) + ROM_LOAD32_WORD( "mpr-17555.17", 0x400000, 0x200000, CRC(4df2810b) SHA1(720c4628d7783f0323b5723b441e13741556241e) ) + ROM_LOAD32_WORD( "mpr-17549.21", 0x400002, 0x200000, CRC(e0bce0e6) SHA1(0570604dc2007288795a3125ffd480bc4b3b0802) ) + ROM_LOAD32_WORD( "mpr-17556.18", 0x800000, 0x200000, CRC(41a47616) SHA1(55b909d2bc2079d0dfed5036c78c9e09bce09843) ) + ROM_LOAD32_WORD( "mpr-17550.22", 0x800002, 0x200000, CRC(c36ff3f5) SHA1(f14fdf275905a90a0d4cc534d90b0302f26676d8) ) + + ROM_REGION( 0x1000000, "textures", ROMREGION_ERASEFF ) // Textures + ROM_LOAD32_WORD( "mpr-17553.25", 0x000000, 0x200000, CRC(5da1c5d3) SHA1(c627b25a1f61a9fe9182e2199f70f6e485503c7b) ) + ROM_LOAD32_WORD( "mpr-17552.24", 0x000002, 0x200000, CRC(e91e7427) SHA1(0ac1111f2ecb4f924b5119eaaac8fa7bc87ab9d1) ) + ROM_LOAD32_WORD( "mpr-17547.27", 0x800000, 0x200000, CRC(be940431) SHA1(5c1196a6454a4fead79a930979f2e69639ec2bb9) ) + ROM_LOAD32_WORD( "mpr-17546.26", 0x800002, 0x200000, CRC(042a194b) SHA1(c6d8524dc0a879394f1234b7bb04836081bb3830) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-17574.30", 0x000000, 0x080000, CRC(4d4c3a55) SHA1(b6c0c3f0473bd7fc3ef4f5146110dfcc899a5af9) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-17573.31", 0x000000, 0x200000, CRC(e43557fe) SHA1(4c61a135819862df02347c118dc4d88a0adac273) ) + ROM_LOAD16_WORD_SWAP( "mpr-17572.32", 0x200000, 0x200000, CRC(4febecc8) SHA1(9683ea9bedfc5cd7b4a28e9a68792c0dc549d911) ) + ROM_LOAD16_WORD_SWAP( "mpr-17571.36", 0x400000, 0x200000, CRC(51caa584) SHA1(cbbde1c55eddbeeefd283bb5afd79a670a282e3a) ) + ROM_LOAD16_WORD_SWAP( "mpr-17570.37", 0x600000, 0x200000, CRC(bccd324b) SHA1(4c7ebdea08b2dedf621f121785ed1c40ebae4236) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD +ROM_END + +ROM_START( vf2b ) /* Virtua Fighter 2 Revision B, Model 2A */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-17568b.12", 0x000000, 0x020000, CRC(5d966bbf) SHA1(01d46313148ce509fa5641fb07a3f840c00886ac) ) + ROM_LOAD32_WORD( "epr-17569b.13", 0x000002, 0x020000, CRC(0b8c1ccc) SHA1(ba2e0ac8b31955fed237ba9a5eda9fa14d1db11f) ) + ROM_LOAD32_WORD( "epr-17562b.14", 0x040000, 0x020000, CRC(b778d4eb) SHA1(a7162d9c39d601ac92310c8cf2ae388647a5295a) ) + ROM_LOAD32_WORD( "epr-17563b.15", 0x040002, 0x020000, CRC(a05c15f6) SHA1(b9b1f3c68c53a86dfa3cbc85fcb9150546c13f23) ) + + ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-17560.10", 0x000000, 0x200000, CRC(d1389864) SHA1(88e9a8b6b0f58c96957015179e7ff10f837040e6) ) + ROM_LOAD32_WORD( "mpr-17561.11", 0x000002, 0x200000, CRC(b98d0101) SHA1(e154877380b9250d8119dd4c14ba306c7b337dcd) ) + ROM_LOAD32_WORD( "mpr-17558.8", 0x400000, 0x200000, CRC(4b15f5a6) SHA1(9a34724958fef9b49eae39c6ea136e0cf532154b) ) + ROM_LOAD32_WORD( "mpr-17559.9", 0x400002, 0x200000, CRC(d3264de6) SHA1(2f094ff0b95bf1cd5c283414634ea9597204d374) ) + ROM_LOAD32_WORD( "mpr-17566.6", 0x800000, 0x200000, CRC(fb41ef98) SHA1(ad4d1ba5e5b39b2d87105ae80750284867aa4ed3) ) + ROM_LOAD32_WORD( "mpr-17567.7", 0x800002, 0x200000, CRC(c3396922) SHA1(7e0700ded530e4eb58e9a68cdb92791284c91431) ) + ROM_LOAD32_WORD( "mpr-17564.4", 0xc00000, 0x200000, CRC(d8062489) SHA1(57666b6937f79bb65c43ed02b04a454882d01e61) ) + ROM_LOAD32_WORD( "mpr-17565.5", 0xc00002, 0x200000, CRC(0517c6e9) SHA1(d9ba93998286713758385033119416714674c8d8) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-17554.16", 0x000000, 0x200000, CRC(27896d82) SHA1(c0624e58de2e427465daaa10dbb02ea2a1fd0f1b) ) + ROM_LOAD32_WORD( "mpr-17548.20", 0x000002, 0x200000, CRC(c95facc2) SHA1(09d19abe5d75a335df7510df8abb2d4425159cdf) ) + ROM_LOAD32_WORD( "mpr-17555.17", 0x400000, 0x200000, CRC(4df2810b) SHA1(720c4628d7783f0323b5723b441e13741556241e) ) + ROM_LOAD32_WORD( "mpr-17549.21", 0x400002, 0x200000, CRC(e0bce0e6) SHA1(0570604dc2007288795a3125ffd480bc4b3b0802) ) + ROM_LOAD32_WORD( "mpr-17556.18", 0x800000, 0x200000, CRC(41a47616) SHA1(55b909d2bc2079d0dfed5036c78c9e09bce09843) ) + ROM_LOAD32_WORD( "mpr-17550.22", 0x800002, 0x200000, CRC(c36ff3f5) SHA1(f14fdf275905a90a0d4cc534d90b0302f26676d8) ) + + ROM_REGION( 0x1000000, "textures", ROMREGION_ERASEFF ) // Textures + ROM_LOAD32_WORD( "mpr-17553.25", 0x000000, 0x200000, CRC(5da1c5d3) SHA1(c627b25a1f61a9fe9182e2199f70f6e485503c7b) ) + ROM_LOAD32_WORD( "mpr-17552.24", 0x000002, 0x200000, CRC(e91e7427) SHA1(0ac1111f2ecb4f924b5119eaaac8fa7bc87ab9d1) ) + ROM_LOAD32_WORD( "mpr-17547.27", 0x800000, 0x200000, CRC(be940431) SHA1(5c1196a6454a4fead79a930979f2e69639ec2bb9) ) + ROM_LOAD32_WORD( "mpr-17546.26", 0x800002, 0x200000, CRC(042a194b) SHA1(c6d8524dc0a879394f1234b7bb04836081bb3830) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-17574.30", 0x000000, 0x080000, CRC(4d4c3a55) SHA1(b6c0c3f0473bd7fc3ef4f5146110dfcc899a5af9) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-17573.31", 0x000000, 0x200000, CRC(e43557fe) SHA1(4c61a135819862df02347c118dc4d88a0adac273) ) + ROM_LOAD16_WORD_SWAP( "mpr-17572.32", 0x200000, 0x200000, CRC(4febecc8) SHA1(9683ea9bedfc5cd7b4a28e9a68792c0dc549d911) ) + ROM_LOAD16_WORD_SWAP( "mpr-17571.36", 0x400000, 0x200000, CRC(51caa584) SHA1(cbbde1c55eddbeeefd283bb5afd79a670a282e3a) ) + ROM_LOAD16_WORD_SWAP( "mpr-17570.37", 0x600000, 0x200000, CRC(bccd324b) SHA1(4c7ebdea08b2dedf621f121785ed1c40ebae4236) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD +ROM_END + +ROM_START( vf2a ) /* Virtua Fighter 2 Revision A, Model 2A */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-17568a.12", 0x000000, 0x020000, CRC(5b10f232) SHA1(04df1eb9cf094d8dc5118b95028b544b47d5d328) ) + ROM_LOAD32_WORD( "epr-17569a.13", 0x000002, 0x020000, CRC(17c208e0) SHA1(260c762d7853fb1d6f894d4dd954d82dfbc92d2d) ) + ROM_LOAD32_WORD( "epr-17562a.14", 0x040000, 0x020000, CRC(db68a01a) SHA1(1e9d3f09821596d3560bf54f6323ba295ee430d8) ) + ROM_LOAD32_WORD( "epr-17563a.15", 0x040002, 0x020000, CRC(4696439d) SHA1(846fa1435a1a5c9f7f9690e1c810ca89008d1626) ) + + ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-17560.10", 0x000000, 0x200000, CRC(d1389864) SHA1(88e9a8b6b0f58c96957015179e7ff10f837040e6) ) + ROM_LOAD32_WORD( "mpr-17561.11", 0x000002, 0x200000, CRC(b98d0101) SHA1(e154877380b9250d8119dd4c14ba306c7b337dcd) ) + ROM_LOAD32_WORD( "mpr-17558.8", 0x400000, 0x200000, CRC(4b15f5a6) SHA1(9a34724958fef9b49eae39c6ea136e0cf532154b) ) + ROM_LOAD32_WORD( "mpr-17559.9", 0x400002, 0x200000, CRC(d3264de6) SHA1(2f094ff0b95bf1cd5c283414634ea9597204d374) ) + ROM_LOAD32_WORD( "mpr-17566.6", 0x800000, 0x200000, CRC(fb41ef98) SHA1(ad4d1ba5e5b39b2d87105ae80750284867aa4ed3) ) + ROM_LOAD32_WORD( "mpr-17567.7", 0x800002, 0x200000, CRC(c3396922) SHA1(7e0700ded530e4eb58e9a68cdb92791284c91431) ) + ROM_LOAD32_WORD( "mpr-17564.4", 0xc00000, 0x200000, CRC(d8062489) SHA1(57666b6937f79bb65c43ed02b04a454882d01e61) ) + ROM_LOAD32_WORD( "mpr-17565.5", 0xc00002, 0x200000, CRC(0517c6e9) SHA1(d9ba93998286713758385033119416714674c8d8) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-17554.16", 0x000000, 0x200000, CRC(27896d82) SHA1(c0624e58de2e427465daaa10dbb02ea2a1fd0f1b) ) + ROM_LOAD32_WORD( "mpr-17548.20", 0x000002, 0x200000, CRC(c95facc2) SHA1(09d19abe5d75a335df7510df8abb2d4425159cdf) ) + ROM_LOAD32_WORD( "mpr-17555.17", 0x400000, 0x200000, CRC(4df2810b) SHA1(720c4628d7783f0323b5723b441e13741556241e) ) + ROM_LOAD32_WORD( "mpr-17549.21", 0x400002, 0x200000, CRC(e0bce0e6) SHA1(0570604dc2007288795a3125ffd480bc4b3b0802) ) + ROM_LOAD32_WORD( "mpr-17556.18", 0x800000, 0x200000, CRC(41a47616) SHA1(55b909d2bc2079d0dfed5036c78c9e09bce09843) ) + ROM_LOAD32_WORD( "mpr-17550.22", 0x800002, 0x200000, CRC(c36ff3f5) SHA1(f14fdf275905a90a0d4cc534d90b0302f26676d8) ) + + ROM_REGION( 0x1000000, "textures", ROMREGION_ERASEFF ) // Textures + ROM_LOAD32_WORD( "mpr-17553.25", 0x000000, 0x200000, CRC(5da1c5d3) SHA1(c627b25a1f61a9fe9182e2199f70f6e485503c7b) ) + ROM_LOAD32_WORD( "mpr-17552.24", 0x000002, 0x200000, CRC(e91e7427) SHA1(0ac1111f2ecb4f924b5119eaaac8fa7bc87ab9d1) ) + ROM_LOAD32_WORD( "mpr-17547.27", 0x800000, 0x200000, CRC(be940431) SHA1(5c1196a6454a4fead79a930979f2e69639ec2bb9) ) + ROM_LOAD32_WORD( "mpr-17546.26", 0x800002, 0x200000, CRC(042a194b) SHA1(c6d8524dc0a879394f1234b7bb04836081bb3830) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-17574.30", 0x000000, 0x080000, CRC(4d4c3a55) SHA1(b6c0c3f0473bd7fc3ef4f5146110dfcc899a5af9) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-17573.31", 0x000000, 0x200000, CRC(e43557fe) SHA1(4c61a135819862df02347c118dc4d88a0adac273) ) + ROM_LOAD16_WORD_SWAP( "mpr-17572.32", 0x200000, 0x200000, CRC(4febecc8) SHA1(9683ea9bedfc5cd7b4a28e9a68792c0dc549d911) ) + ROM_LOAD16_WORD_SWAP( "mpr-17571.36", 0x400000, 0x200000, CRC(51caa584) SHA1(cbbde1c55eddbeeefd283bb5afd79a670a282e3a) ) + ROM_LOAD16_WORD_SWAP( "mpr-17570.37", 0x600000, 0x200000, CRC(bccd324b) SHA1(4c7ebdea08b2dedf621f121785ed1c40ebae4236) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD +ROM_END + +ROM_START( vf2o ) /* Virtua Fighter 2, Model 2A */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-17568.12", 0x000000, 0x020000, CRC(cf5d53d1) SHA1(4ed907bbfc1a47e51c9cc11f55645752574adaef) ) + ROM_LOAD32_WORD( "epr-17569.13", 0x000002, 0x020000, CRC(0fb32808) SHA1(95efb3eeaf95fb5f79ddae4ef20e2211b07f8d30) ) + ROM_LOAD32_WORD( "epr-17562.14", 0x040000, 0x020000, CRC(b893bcef) SHA1(2f862a7099aa757ee1f2ad8245eb4f8f4fdfb7bc) ) + ROM_LOAD32_WORD( "epr-17563.15", 0x040002, 0x020000, CRC(3b55f5a8) SHA1(b1ca3d4d3568c1652dcd8e546ffff23a4a21a699) ) + + ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-17560.10", 0x000000, 0x200000, CRC(d1389864) SHA1(88e9a8b6b0f58c96957015179e7ff10f837040e6) ) + ROM_LOAD32_WORD( "mpr-17561.11", 0x000002, 0x200000, CRC(b98d0101) SHA1(e154877380b9250d8119dd4c14ba306c7b337dcd) ) + ROM_LOAD32_WORD( "mpr-17558.8", 0x400000, 0x200000, CRC(4b15f5a6) SHA1(9a34724958fef9b49eae39c6ea136e0cf532154b) ) + ROM_LOAD32_WORD( "mpr-17559.9", 0x400002, 0x200000, CRC(d3264de6) SHA1(2f094ff0b95bf1cd5c283414634ea9597204d374) ) + ROM_LOAD32_WORD( "mpr-17566.6", 0x800000, 0x200000, CRC(fb41ef98) SHA1(ad4d1ba5e5b39b2d87105ae80750284867aa4ed3) ) + ROM_LOAD32_WORD( "mpr-17567.7", 0x800002, 0x200000, CRC(c3396922) SHA1(7e0700ded530e4eb58e9a68cdb92791284c91431) ) + ROM_LOAD32_WORD( "mpr-17564.4", 0xc00000, 0x200000, CRC(d8062489) SHA1(57666b6937f79bb65c43ed02b04a454882d01e61) ) + ROM_LOAD32_WORD( "mpr-17565.5", 0xc00002, 0x200000, CRC(0517c6e9) SHA1(d9ba93998286713758385033119416714674c8d8) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-17554.16", 0x000000, 0x200000, CRC(27896d82) SHA1(c0624e58de2e427465daaa10dbb02ea2a1fd0f1b) ) + ROM_LOAD32_WORD( "mpr-17548.20", 0x000002, 0x200000, CRC(c95facc2) SHA1(09d19abe5d75a335df7510df8abb2d4425159cdf) ) + ROM_LOAD32_WORD( "mpr-17555.17", 0x400000, 0x200000, CRC(4df2810b) SHA1(720c4628d7783f0323b5723b441e13741556241e) ) + ROM_LOAD32_WORD( "mpr-17549.21", 0x400002, 0x200000, CRC(e0bce0e6) SHA1(0570604dc2007288795a3125ffd480bc4b3b0802) ) + ROM_LOAD32_WORD( "mpr-17556.18", 0x800000, 0x200000, CRC(41a47616) SHA1(55b909d2bc2079d0dfed5036c78c9e09bce09843) ) + ROM_LOAD32_WORD( "mpr-17550.22", 0x800002, 0x200000, CRC(c36ff3f5) SHA1(f14fdf275905a90a0d4cc534d90b0302f26676d8) ) + + ROM_REGION( 0x1000000, "textures", ROMREGION_ERASEFF ) // Textures + ROM_LOAD32_WORD( "mpr-17553.25", 0x000000, 0x200000, CRC(5da1c5d3) SHA1(c627b25a1f61a9fe9182e2199f70f6e485503c7b) ) + ROM_LOAD32_WORD( "mpr-17552.24", 0x000002, 0x200000, CRC(e91e7427) SHA1(0ac1111f2ecb4f924b5119eaaac8fa7bc87ab9d1) ) + ROM_LOAD32_WORD( "mpr-17547.27", 0x800000, 0x200000, CRC(be940431) SHA1(5c1196a6454a4fead79a930979f2e69639ec2bb9) ) + ROM_LOAD32_WORD( "mpr-17546.26", 0x800002, 0x200000, CRC(042a194b) SHA1(c6d8524dc0a879394f1234b7bb04836081bb3830) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-17574.30", 0x000000, 0x080000, CRC(4d4c3a55) SHA1(b6c0c3f0473bd7fc3ef4f5146110dfcc899a5af9) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-17573.31", 0x000000, 0x200000, CRC(e43557fe) SHA1(4c61a135819862df02347c118dc4d88a0adac273) ) + ROM_LOAD16_WORD_SWAP( "mpr-17572.32", 0x200000, 0x200000, CRC(4febecc8) SHA1(9683ea9bedfc5cd7b4a28e9a68792c0dc549d911) ) + ROM_LOAD16_WORD_SWAP( "mpr-17571.36", 0x400000, 0x200000, CRC(51caa584) SHA1(cbbde1c55eddbeeefd283bb5afd79a670a282e3a) ) + ROM_LOAD16_WORD_SWAP( "mpr-17570.37", 0x600000, 0x200000, CRC(bccd324b) SHA1(4c7ebdea08b2dedf621f121785ed1c40ebae4236) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD +ROM_END + +/* Sega Rally Championship Revision C, Model 2A, Sega game ID# 833-11649 RALLY TWIN, Sega ROM board ID# 834-11618 RALLY TWIN */ +ROM_START( srallyc ) + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-17888c.12", 0x000000, 0x080000, CRC(3d6808aa) SHA1(33abf9cdcee9583dc600c94e1e29ce260e8c5d32) ) + ROM_LOAD32_WORD( "epr-17889c.13", 0x000002, 0x080000, CRC(f43c7802) SHA1(4b1efb3d5644fed1753da1750bf5c300d3a15d2c) ) + + ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-17746.10", 0x000000, 0x200000, CRC(8fe311f4) SHA1(f4ada8e5c906fc384bed1b96f09cdf313f89e825) ) + ROM_LOAD32_WORD( "mpr-17747.11", 0x000002, 0x200000, CRC(543593fd) SHA1(5ba63a77e9fc70569af21d50b3171bc8ff4522b8) ) + ROM_LOAD32_WORD( "mpr-17744.8", 0x400000, 0x200000, CRC(71fed098) SHA1(1d187cad375121a45348d640edd3cc7dce658d28) ) + ROM_LOAD32_WORD( "mpr-17745.9", 0x400002, 0x200000, CRC(8ecca705) SHA1(ed2b3298aad6f4e52dc672a0168183e457564b43) ) + ROM_LOAD32_WORD( "mpr-17884.6", 0x800000, 0x200000, CRC(4cfc95e1) SHA1(81d927b8c4f9d0c4c5e29d676b30f30f83751fdc) ) + ROM_LOAD32_WORD( "mpr-17885.7", 0x800002, 0x200000, CRC(a08d2467) SHA1(9449ac8f8f9ce8d8e536b05a91e46841fed7f2d0) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD( "mpr-17754.28", 0x000000, 0x200000, CRC(81a84f67) SHA1(c0a9b690523a529e4015e9af10dc3fb2a1726f08) ) + ROM_LOAD32_WORD( "mpr-17755.29", 0x000002, 0x200000, CRC(2a6e7da4) SHA1(e60803ae951489fe47d66731d15c32249ca547b4) ) + + ROM_REGION( 0x010000, "drivecpu", 0 ) // Drive I/O program + ROM_LOAD( "epr-17891.ic12", 0x000000, 0x010000, CRC(9a33b437) SHA1(3e8f210aa5159e78f640126cb5ce7f05f22560f2) ) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-17748.16", 0x000000, 0x200000, CRC(3148a2b2) SHA1(283cc49bfb6c6381a7ead9273fd097dca5b981b6) ) + ROM_LOAD32_WORD( "mpr-17750.20", 0x000002, 0x200000, CRC(232aec29) SHA1(4d470e71df61298282c356814e2d151fda323fb6) ) + ROM_LOAD32_WORD( "mpr-17749.17", 0x400000, 0x200000, CRC(0838d184) SHA1(704175c8b29e4c989afcb7be42e7e0e096740eaf) ) + ROM_LOAD32_WORD( "mpr-17751.21", 0x400002, 0x200000, CRC(ed87ac62) SHA1(601542149d33ca52a47536b4b0af47bf1fd87eb2) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD( "mpr-17753.25", 0x000000, 0x200000, CRC(6db0eb36) SHA1(dd5fd3c9592360d3e95623ac2491e6faabe9dbcb) ) + ROM_LOAD32_WORD( "mpr-17752.24", 0x000002, 0x200000, CRC(d6aa86ce) SHA1(1d342f87d1af1e5438d1ae818b1b14268e765897) ) + + ROM_REGION( 0x20000, "cpu4", 0) // Communication program + ROM_LOAD( "epr-16726.bin", 0x000000, 0x020000, CRC(c179b8c7) SHA1(86d3e65c77fb53b1d380b629348f4ab5b3d39228) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-17890a.30", 0x000000, 0x040000, CRC(5bac3fa1) SHA1(3635333d36463b6fab25560ed918e05138f964dc) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-17756.31", 0x000000, 0x200000, CRC(7725f111) SHA1(1f1ee3f19a6bcf57bc5a1c7dd64ee83f8b81f084) ) + ROM_LOAD16_WORD_SWAP( "mpr-17757.32", 0x200000, 0x200000, CRC(1616e649) SHA1(1d3a0e441d150ada0535a9d50e2f69dd4b99c584) ) + ROM_LOAD16_WORD_SWAP( "mpr-17886.36", 0x400000, 0x200000, CRC(54a72923) SHA1(103c4838b27378c834c08d29d6fb6ba95e7f9d03) ) + ROM_LOAD16_WORD_SWAP( "mpr-17887.37", 0x600000, 0x200000, CRC(38c31fdd) SHA1(a85f05160b060d9d4a431aaa73cfc03f24214fb9) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD +ROM_END + +ROM_START( srallycb ) /* Sega Rally Championship Revision B, Model 2A, Sega game ID# 833-11649 RALLY TWIN, Sega ROM board ID# 834-11618 RALLY TWIN */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-17888b.12", 0x000000, 0x080000, CRC(95bce0b9) SHA1(9b293b430db14cfab35466d2f9a1e3f7e2df3143) ) + ROM_LOAD32_WORD( "epr-17889b.13", 0x000002, 0x080000, CRC(395c425e) SHA1(9868d2b79255120abfdb7f9c0930a607aeef5363) ) + + ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-17746.10", 0x000000, 0x200000, CRC(8fe311f4) SHA1(f4ada8e5c906fc384bed1b96f09cdf313f89e825) ) + ROM_LOAD32_WORD( "mpr-17747.11", 0x000002, 0x200000, CRC(543593fd) SHA1(5ba63a77e9fc70569af21d50b3171bc8ff4522b8) ) + ROM_LOAD32_WORD( "mpr-17744.8", 0x400000, 0x200000, CRC(71fed098) SHA1(1d187cad375121a45348d640edd3cc7dce658d28) ) + ROM_LOAD32_WORD( "mpr-17745.9", 0x400002, 0x200000, CRC(8ecca705) SHA1(ed2b3298aad6f4e52dc672a0168183e457564b43) ) + ROM_LOAD32_WORD( "mpr-17884.6", 0x800000, 0x200000, CRC(4cfc95e1) SHA1(81d927b8c4f9d0c4c5e29d676b30f30f83751fdc) ) + ROM_LOAD32_WORD( "mpr-17885.7", 0x800002, 0x200000, CRC(a08d2467) SHA1(9449ac8f8f9ce8d8e536b05a91e46841fed7f2d0) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD( "mpr-17754.28", 0x000000, 0x200000, CRC(81a84f67) SHA1(c0a9b690523a529e4015e9af10dc3fb2a1726f08) ) + ROM_LOAD32_WORD( "mpr-17755.29", 0x000002, 0x200000, CRC(2a6e7da4) SHA1(e60803ae951489fe47d66731d15c32249ca547b4) ) + + ROM_REGION( 0x010000, "drivecpu", 0 ) // Drive I/O program + ROM_LOAD( "epr-17891.ic12", 0x000000, 0x010000, CRC(9a33b437) SHA1(3e8f210aa5159e78f640126cb5ce7f05f22560f2) ) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-17748.16", 0x000000, 0x200000, CRC(3148a2b2) SHA1(283cc49bfb6c6381a7ead9273fd097dca5b981b6) ) + ROM_LOAD32_WORD( "mpr-17750.20", 0x000002, 0x200000, CRC(232aec29) SHA1(4d470e71df61298282c356814e2d151fda323fb6) ) + ROM_LOAD32_WORD( "mpr-17749.17", 0x400000, 0x200000, CRC(0838d184) SHA1(704175c8b29e4c989afcb7be42e7e0e096740eaf) ) + ROM_LOAD32_WORD( "mpr-17751.21", 0x400002, 0x200000, CRC(ed87ac62) SHA1(601542149d33ca52a47536b4b0af47bf1fd87eb2) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD( "mpr-17753.25", 0x000000, 0x200000, CRC(6db0eb36) SHA1(dd5fd3c9592360d3e95623ac2491e6faabe9dbcb) ) + ROM_LOAD32_WORD( "mpr-17752.24", 0x000002, 0x200000, CRC(d6aa86ce) SHA1(1d342f87d1af1e5438d1ae818b1b14268e765897) ) + + ROM_REGION( 0x20000, "cpu4", 0) // Communication program + ROM_LOAD( "epr-16726.bin", 0x000000, 0x020000, CRC(c179b8c7) SHA1(86d3e65c77fb53b1d380b629348f4ab5b3d39228) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-17890a.30", 0x000000, 0x040000, CRC(5bac3fa1) SHA1(3635333d36463b6fab25560ed918e05138f964dc) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-17756.31", 0x000000, 0x200000, CRC(7725f111) SHA1(1f1ee3f19a6bcf57bc5a1c7dd64ee83f8b81f084) ) + ROM_LOAD16_WORD_SWAP( "mpr-17757.32", 0x200000, 0x200000, CRC(1616e649) SHA1(1d3a0e441d150ada0535a9d50e2f69dd4b99c584) ) + ROM_LOAD16_WORD_SWAP( "mpr-17886.36", 0x400000, 0x200000, CRC(54a72923) SHA1(103c4838b27378c834c08d29d6fb6ba95e7f9d03) ) + ROM_LOAD16_WORD_SWAP( "mpr-17887.37", 0x600000, 0x200000, CRC(38c31fdd) SHA1(a85f05160b060d9d4a431aaa73cfc03f24214fb9) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD +ROM_END + +ROM_START( srallycc ) /* Sega Rally Championship Revision A, Model 2A, Sega game ID# 833-11649 RALLY TWIN, Sega ROM board ID# 834-11618 RALLY TWIN */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-17888a.12", 0x000000, 0x080000, CRC(7f71fe46) SHA1(cca55b2ce837b1147a31666c1d4e2ecc793447c8) ) + ROM_LOAD32_WORD( "epr-17889a.13", 0x000002, 0x080000, CRC(6d99b766) SHA1(720e1d8090746c9baa55682e33ba485cf64a1522) ) + + ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-17746.10", 0x000000, 0x200000, CRC(8fe311f4) SHA1(f4ada8e5c906fc384bed1b96f09cdf313f89e825) ) + ROM_LOAD32_WORD( "mpr-17747.11", 0x000002, 0x200000, CRC(543593fd) SHA1(5ba63a77e9fc70569af21d50b3171bc8ff4522b8) ) + ROM_LOAD32_WORD( "mpr-17744.8", 0x400000, 0x200000, CRC(71fed098) SHA1(1d187cad375121a45348d640edd3cc7dce658d28) ) + ROM_LOAD32_WORD( "mpr-17745.9", 0x400002, 0x200000, CRC(8ecca705) SHA1(ed2b3298aad6f4e52dc672a0168183e457564b43) ) + ROM_LOAD32_WORD( "mpr-17884.6", 0x800000, 0x200000, CRC(4cfc95e1) SHA1(81d927b8c4f9d0c4c5e29d676b30f30f83751fdc) ) + ROM_LOAD32_WORD( "mpr-17885.7", 0x800002, 0x200000, CRC(a08d2467) SHA1(9449ac8f8f9ce8d8e536b05a91e46841fed7f2d0) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD( "mpr-17754.28", 0x000000, 0x200000, CRC(81a84f67) SHA1(c0a9b690523a529e4015e9af10dc3fb2a1726f08) ) + ROM_LOAD32_WORD( "mpr-17755.29", 0x000002, 0x200000, CRC(2a6e7da4) SHA1(e60803ae951489fe47d66731d15c32249ca547b4) ) + + ROM_REGION( 0x010000, "drivecpu", 0 ) // Drive I/O program + ROM_LOAD( "epr-17891.ic12", 0x000000, 0x010000, CRC(9a33b437) SHA1(3e8f210aa5159e78f640126cb5ce7f05f22560f2) ) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-17748.16", 0x000000, 0x200000, CRC(3148a2b2) SHA1(283cc49bfb6c6381a7ead9273fd097dca5b981b6) ) + ROM_LOAD32_WORD( "mpr-17750.20", 0x000002, 0x200000, CRC(232aec29) SHA1(4d470e71df61298282c356814e2d151fda323fb6) ) + ROM_LOAD32_WORD( "mpr-17749.17", 0x400000, 0x200000, CRC(0838d184) SHA1(704175c8b29e4c989afcb7be42e7e0e096740eaf) ) + ROM_LOAD32_WORD( "mpr-17751.21", 0x400002, 0x200000, CRC(ed87ac62) SHA1(601542149d33ca52a47536b4b0af47bf1fd87eb2) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD( "mpr-17753.25", 0x000000, 0x200000, CRC(6db0eb36) SHA1(dd5fd3c9592360d3e95623ac2491e6faabe9dbcb) ) + ROM_LOAD32_WORD( "mpr-17752.24", 0x000002, 0x200000, CRC(d6aa86ce) SHA1(1d342f87d1af1e5438d1ae818b1b14268e765897) ) + + ROM_REGION( 0x20000, "cpu4", 0) // Communication program + ROM_LOAD( "epr-16726.bin", 0x000000, 0x020000, CRC(c179b8c7) SHA1(86d3e65c77fb53b1d380b629348f4ab5b3d39228) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-17890a.30", 0x000000, 0x040000, CRC(5bac3fa1) SHA1(3635333d36463b6fab25560ed918e05138f964dc) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-17756.31", 0x000000, 0x200000, CRC(7725f111) SHA1(1f1ee3f19a6bcf57bc5a1c7dd64ee83f8b81f084) ) + ROM_LOAD16_WORD_SWAP( "mpr-17757.32", 0x200000, 0x200000, CRC(1616e649) SHA1(1d3a0e441d150ada0535a9d50e2f69dd4b99c584) ) + ROM_LOAD16_WORD_SWAP( "mpr-17886.36", 0x400000, 0x200000, CRC(54a72923) SHA1(103c4838b27378c834c08d29d6fb6ba95e7f9d03) ) + ROM_LOAD16_WORD_SWAP( "mpr-17887.37", 0x600000, 0x200000, CRC(38c31fdd) SHA1(a85f05160b060d9d4a431aaa73cfc03f24214fb9) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD +ROM_END + +ROM_START( srallycdx ) /* Sega Rally Championship DX Revision A, Model 2A - Single player cabinet - NO LINK option!, Sega ROM board ID# 834-11254 RALLY 50 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-17760a.12", 0x000000, 0x020000, CRC(2c1b996b) SHA1(28c1196aac1c242e61069ee809c9e8229c061950) ) /* AMD 27C1024 EPROM */ + ROM_LOAD32_WORD( "epr-17761a.13", 0x000002, 0x020000, CRC(50813f66) SHA1(f27ffb314e06fa18d863fdf172dafe56122cd606) ) /* AMD 27C1024 EPROM */ + + ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-17746.10", 0x000000, 0x200000, CRC(8fe311f4) SHA1(f4ada8e5c906fc384bed1b96f09cdf313f89e825) ) + ROM_LOAD32_WORD( "mpr-17747.11", 0x000002, 0x200000, CRC(543593fd) SHA1(5ba63a77e9fc70569af21d50b3171bc8ff4522b8) ) + ROM_LOAD32_WORD( "mpr-17744.8", 0x400000, 0x200000, CRC(71fed098) SHA1(1d187cad375121a45348d640edd3cc7dce658d28) ) + ROM_LOAD32_WORD( "mpr-17745.9", 0x400002, 0x200000, CRC(8ecca705) SHA1(ed2b3298aad6f4e52dc672a0168183e457564b43) ) + ROM_LOAD32_WORD( "mpr-17764a.6", 0x800000, 0x200000, CRC(dcb91e31) SHA1(2725268e97b9f4c14d56c040af38bc82f5020e3e) ) // IC 6 and 7 likely EPROMs + ROM_LOAD32_WORD( "mpr-17765a.7", 0x800002, 0x200000, CRC(b657dc48) SHA1(ae0f1bc6e2479fa51ca36f8be3a1785981c4dfe9) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD( "mpr-17754.28", 0x000000, 0x200000, CRC(81a84f67) SHA1(c0a9b690523a529e4015e9af10dc3fb2a1726f08) ) + ROM_LOAD32_WORD( "mpr-17755.29", 0x000002, 0x200000, CRC(2a6e7da4) SHA1(e60803ae951489fe47d66731d15c32249ca547b4) ) + + ROM_REGION( 0x010000, "drivecpu", 0 ) // Drive I/O program + ROM_LOAD( "epr-17762.ic12", 0x000000, 0x010000, NO_DUMP ) /* Need to verify actual EPR-xxxx number, might be EPR-17759 */ + ROM_LOAD( "epr-17891.ic12", 0x000000, 0x010000, CRC(9a33b437) SHA1(3e8f210aa5159e78f640126cb5ce7f05f22560f2) ) /* REMOVE when EPR-17762 is dumped & added */ + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-17748.16", 0x000000, 0x200000, CRC(3148a2b2) SHA1(283cc49bfb6c6381a7ead9273fd097dca5b981b6) ) + ROM_LOAD32_WORD( "mpr-17750.20", 0x000002, 0x200000, CRC(232aec29) SHA1(4d470e71df61298282c356814e2d151fda323fb6) ) + ROM_LOAD32_WORD( "mpr-17749.17", 0x400000, 0x200000, CRC(0838d184) SHA1(704175c8b29e4c989afcb7be42e7e0e096740eaf) ) + ROM_LOAD32_WORD( "mpr-17751.21", 0x400002, 0x200000, CRC(ed87ac62) SHA1(601542149d33ca52a47536b4b0af47bf1fd87eb2) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD( "mpr-17753.25", 0x000000, 0x200000, CRC(6db0eb36) SHA1(dd5fd3c9592360d3e95623ac2491e6faabe9dbcb) ) + ROM_LOAD32_WORD( "mpr-17752.24", 0x000002, 0x200000, CRC(d6aa86ce) SHA1(1d342f87d1af1e5438d1ae818b1b14268e765897) ) + + ROM_REGION( 0x20000, "cpu4", 0) // Communication program + ROM_LOAD( "epr-16726.bin", 0x000000, 0x020000, CRC(c179b8c7) SHA1(86d3e65c77fb53b1d380b629348f4ab5b3d39228) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-17763.30", 0x000000, 0x040000, NO_DUMP ) /* Number verified via Sega Rally Champ DX manual */ + ROM_LOAD16_WORD_SWAP( "epr-17890a.30", 0x000000, 0x040000, CRC(5bac3fa1) SHA1(3635333d36463b6fab25560ed918e05138f964dc) ) /* REMOVE when EPR-17763 & EPR-17758 is dumped & added */ + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-17756.31", 0x000000, 0x200000, CRC(7725f111) SHA1(1f1ee3f19a6bcf57bc5a1c7dd64ee83f8b81f084) ) + ROM_LOAD16_WORD_SWAP( "mpr-17757.32", 0x200000, 0x200000, CRC(1616e649) SHA1(1d3a0e441d150ada0535a9d50e2f69dd4b99c584) ) + ROM_LOAD16_WORD_SWAP( "mpr-17758.36", 0x400000, 0x200000, NO_DUMP ) /* Number verified via Sega Rally Champ DX manual */ + /* The DX version doesn't have any sound rom at IC37 */ + ROM_LOAD16_WORD_SWAP( "mpr-17886.36", 0x400000, 0x200000, CRC(54a72923) SHA1(103c4838b27378c834c08d29d6fb6ba95e7f9d03) ) /* REMOVE when EPR-17758 & EPR-17763 is dumped & added */ + ROM_LOAD16_WORD_SWAP( "mpr-17887.37", 0x600000, 0x200000, CRC(38c31fdd) SHA1(a85f05160b060d9d4a431aaa73cfc03f24214fb9) ) /* REMOVE when EPR-17758 & EPR-17763 is dumped & added */ + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD +ROM_END + +ROM_START( srallycdxa ) // Sega Rally Championship DX, Model 2A? - Single player cabinet - NO LINK option! + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-17760.12", 0x000000, 0x020000, CRC(2b5c4321) SHA1(5bcdd8cdfd8f3a95062f83be4a417ba999b50e47) ) // AMD 27C1024 EPROM + ROM_LOAD32_WORD( "epr-17761.13", 0x000002, 0x020000, CRC(50813f66) SHA1(f27ffb314e06fa18d863fdf172dafe56122cd606) ) // AMD 27C1024 EPROM + + ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-17746.10", 0x000000, 0x200000, CRC(8fe311f4) SHA1(f4ada8e5c906fc384bed1b96f09cdf313f89e825) ) + ROM_LOAD32_WORD( "mpr-17747.11", 0x000002, 0x200000, CRC(543593fd) SHA1(5ba63a77e9fc70569af21d50b3171bc8ff4522b8) ) + ROM_LOAD32_WORD( "mpr-17744.8", 0x400000, 0x200000, CRC(71fed098) SHA1(1d187cad375121a45348d640edd3cc7dce658d28) ) + ROM_LOAD32_WORD( "mpr-17745.9", 0x400002, 0x200000, CRC(8ecca705) SHA1(ed2b3298aad6f4e52dc672a0168183e457564b43) ) + ROM_LOAD32_WORD( "epr-17764.6", 0x800000, 0x100000, CRC(68254fcf) SHA1(d90d962b5f81d6598fc9d94c44d9cee71767fc26) ) // NEC D27C8000D EPROM + ROM_LOAD32_WORD( "epr-17765.7", 0x800002, 0x100000, CRC(81112ea5) SHA1(a0251b4f5f18ae2e2d0576087a687dd7c2e49c34) ) // NEC D27C8000D EPROM + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD( "mpr-17754.28", 0x000000, 0x200000, CRC(81a84f67) SHA1(c0a9b690523a529e4015e9af10dc3fb2a1726f08) ) // not present in this rev memory test, why ? + ROM_LOAD32_WORD( "mpr-17755.29", 0x000002, 0x200000, CRC(2a6e7da4) SHA1(e60803ae951489fe47d66731d15c32249ca547b4) ) // + + ROM_REGION( 0x010000, "drivecpu", 0 ) // Drive I/O program + ROM_LOAD( "epr-17762.ic12", 0x000000, 0x010000, NO_DUMP ) /* Need to verify actual EPR-xxxx number, might be EPR-17759 */ + ROM_LOAD( "epr-17891.ic12", 0x000000, 0x010000, CRC(9a33b437) SHA1(3e8f210aa5159e78f640126cb5ce7f05f22560f2) ) /* REMOVE when EPR-17762 is dumped & added */ + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-17748.16", 0x000000, 0x200000, CRC(3148a2b2) SHA1(283cc49bfb6c6381a7ead9273fd097dca5b981b6) ) + ROM_LOAD32_WORD( "mpr-17750.20", 0x000002, 0x200000, CRC(232aec29) SHA1(4d470e71df61298282c356814e2d151fda323fb6) ) + ROM_LOAD32_WORD( "mpr-17749.17", 0x400000, 0x200000, CRC(0838d184) SHA1(704175c8b29e4c989afcb7be42e7e0e096740eaf) ) + ROM_LOAD32_WORD( "mpr-17751.21", 0x400002, 0x200000, CRC(ed87ac62) SHA1(601542149d33ca52a47536b4b0af47bf1fd87eb2) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD( "mpr-17753.25", 0x000000, 0x200000, CRC(6db0eb36) SHA1(dd5fd3c9592360d3e95623ac2491e6faabe9dbcb) ) + ROM_LOAD32_WORD( "mpr-17752.24", 0x000002, 0x200000, CRC(d6aa86ce) SHA1(1d342f87d1af1e5438d1ae818b1b14268e765897) ) + + ROM_REGION( 0x20000, "cpu4", 0) // Communication program + ROM_LOAD( "epr-16726.bin", 0x000000, 0x020000, CRC(c179b8c7) SHA1(86d3e65c77fb53b1d380b629348f4ab5b3d39228) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-17763.30", 0x000000, 0x040000, NO_DUMP ) /* Number verified via Sega Rally Champ DX manual */ + ROM_LOAD16_WORD_SWAP( "epr-17890a.30", 0x000000, 0x040000, CRC(5bac3fa1) SHA1(3635333d36463b6fab25560ed918e05138f964dc) ) /* REMOVE when EPR-17763 & EPR-17758 is dumped & added */ + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-17756.31", 0x000000, 0x200000, CRC(7725f111) SHA1(1f1ee3f19a6bcf57bc5a1c7dd64ee83f8b81f084) ) + ROM_LOAD16_WORD_SWAP( "mpr-17757.32", 0x200000, 0x200000, CRC(1616e649) SHA1(1d3a0e441d150ada0535a9d50e2f69dd4b99c584) ) + ROM_LOAD16_WORD_SWAP( "mpr-17758.36", 0x400000, 0x200000, NO_DUMP ) /* Number verified via Sega Rally Champ DX manual */ + /* The DX version doesn't have any sound rom at IC37 */ + ROM_LOAD16_WORD_SWAP( "mpr-17886.36", 0x400000, 0x200000, CRC(54a72923) SHA1(103c4838b27378c834c08d29d6fb6ba95e7f9d03) ) /* REMOVE when EPR-17758 & EPR-17763 is dumped & added */ + ROM_LOAD16_WORD_SWAP( "mpr-17887.37", 0x600000, 0x200000, CRC(38c31fdd) SHA1(a85f05160b060d9d4a431aaa73cfc03f24214fb9) ) /* REMOVE when EPR-17758 & EPR-17763 is dumped & added */ + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD +ROM_END + +/* + +Manx TT + +837-10848-01-91 Model2 A-CRX CPU BD +837-10849-02 Model2 A-CRX VIDEO BD +837-12396 COMM BD MANX TT + +837-12279 SOUND BD MANX T.T (for DX only) + +Rom boards: + 834-12467 ROM BD MANX T.T TWIN + 834-12277 ROM BD MANX T.T DX + +Known missing roms: + +Manx TT DX +EPR-18742 - Sound CPU rom (on Sound BD) +MPR-18743 - Sound Samples (on Sound BD) +EPR-18744.12 - Program rom +EPR-18745.13 - Program rom +EPR-18784.14 - Program rom* +EPR-18785.15 - Program rom* +EPR-18746.30 - Sound CPU rom* +EPR-18767.5 - Data* +EPR-18768.4 - Data* + +EPR-18763.31 & alt sound CPU code EPR-18924a.30 are dumped + +* Note: The manual scan was low-res and these numbers might be incorrect as they were VERY hard to read! + +*/ + +ROM_START( manxtt ) /* Manx TT Superbike Twin Revision D, Model 2A - Can be set to Twin or Deluxe - Found in DX setup */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-18822d.12", 0x000000, 0x020000, CRC(4f435990) SHA1(0fcf64598384012caea27394280de89a9348a47d) ) + ROM_LOAD32_WORD( "epr-18823d.13", 0x000002, 0x020000, CRC(b8eddb5c) SHA1(7e3b97e3370e68d92922e8999246064196610270) ) + ROM_LOAD32_WORD( "epr-18824d.14", 0x040000, 0x020000, CRC(aca9f61f) SHA1(629db70371ea9986ef75557044b5e98329712418) ) + ROM_LOAD32_WORD( "epr-18825d.15", 0x040002, 0x020000, CRC(5a1d7799) SHA1(bb5e8a5a3b766b5dc4285ecba330094caf8a71e6) ) + + ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-18751.10", 0x000000, 0x200000, CRC(773ad43d) SHA1(4d1601dc08a08b724e33e7cd90a4f22e18cfed9c) ) + ROM_LOAD32_WORD( "mpr-18752.11", 0x000002, 0x200000, CRC(4da3719e) SHA1(24007e4ae3ba1a06321328d14e2bd6002fa1936e) ) + ROM_LOAD32_WORD( "mpr-18749.8", 0x400000, 0x200000, CRC(c3fe0eea) SHA1(ada21405a136935ac4da1a3535c25fccf903f2d1) ) + ROM_LOAD32_WORD( "mpr-18750.9", 0x400002, 0x200000, CRC(40b55494) SHA1(d98ae5518c5d31b155b1a7c4f7d9d67f44d7beae) ) + ROM_LOAD32_WORD( "mpr-18747.6", 0x800000, 0x200000, CRC(a65ec1e8) SHA1(92636bdff0ae4cdb43dfc2986fad2d1b59469323) ) + ROM_LOAD32_WORD( "mpr-18748.7", 0x800002, 0x200000, CRC(375e3748) SHA1(6c2e903dd073b130bcabb347631b876dc868b494) ) + ROM_LOAD32_WORD( "epr-18862.4", 0xc00000, 0x080000, CRC(9adc3a30) SHA1(029db946338f8e0eccace8590082cc96bdf13e31) ) + ROM_LOAD32_WORD( "epr-18863.5", 0xc00002, 0x080000, CRC(603742e9) SHA1(f78a5f7e582d313880c734158bb0fa68b256a58a) ) + ROM_COPY( "main_data", 0xc00000, 0xd00000, 0x100000 ) + ROM_COPY( "main_data", 0xc00000, 0xe00000, 0x100000 ) + ROM_COPY( "main_data", 0xc00000, 0xf00000, 0x100000 ) + + ROM_REGION( 0x1000000, "polygons", ROMREGION_ERASEFF ) // Models + ROM_LOAD32_WORD( "mpr-18753.16", 0x000000, 0x200000, CRC(33ddaa0d) SHA1(26f643d6b9cecf08bd249290a670a0edea1b5be4) ) + ROM_LOAD32_WORD( "mpr-18756.20", 0x000002, 0x200000, CRC(28713617) SHA1(fc2a6258387a1bc3fae2109b2dae6dd2a1984ab5) ) + ROM_LOAD32_WORD( "mpr-18754.17", 0x400000, 0x200000, CRC(09aabde5) SHA1(e50646efb2ca59792833ce91398c4efa861ad6d1) ) + ROM_LOAD32_WORD( "mpr-18757.21", 0x400002, 0x200000, CRC(25fc92e9) SHA1(226c4c7289b3b6009c1ffea4a171e3fb4e31a67c) ) + ROM_LOAD32_WORD( "mpr-18755.18", 0x800000, 0x200000, CRC(bf094d9e) SHA1(2cd7130b226a28098191a6caf6fd761bb0bfac7b) ) + ROM_LOAD32_WORD( "mpr-18758.22", 0x800002, 0x200000, CRC(1b5473d0) SHA1(658e33503f6990f4d9a954c63efad5f53d15f3a4) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD( "mpr-18761.28", 0x000000, 0x200000, CRC(4e39ec05) SHA1(50696cd320f1a6492e0c193713acbce085d959cd) ) + ROM_LOAD32_WORD( "mpr-18762.29", 0x000002, 0x200000, CRC(4ab165d8) SHA1(7ff42a4c7236fec76f94f2d0c5537e503bcc98e5) ) + + ROM_REGION( 0x400000, "textures", 0 ) // Textures + ROM_LOAD32_WORD( "mpr-18760.25", 0x000000, 0x200000, CRC(4e3a4a89) SHA1(bba6cd2a15b3f963388a3a87880da86b10f6e0a2) ) + ROM_LOAD32_WORD( "mpr-18759.24", 0x000002, 0x200000, CRC(278d8742) SHA1(5f285fc8cfe88c00ba2bbe1b509b49abd38e00ec) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-18924a.30", 0x000000, 0x040000, CRC(ad6f40ec) SHA1(27aa0477dc325162766d459ffe95b61ee65dd28f) ) /* Sound program for DX set */ + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-18763.31", 0x000000, 0x200000, CRC(1bcb2283) SHA1(a4a8a2f8f0901bfb57778351210ccfc421cacbd4) ) /* Sound sample for DX set */ + ROM_LOAD16_WORD_SWAP( "mpr-18764.32", 0x200000, 0x200000, CRC(0dc6a860) SHA1(cb2ada0f8a592940de11ee781ad4beb5095c3b37) ) + ROM_LOAD16_WORD_SWAP( "mpr-18765.36", 0x400000, 0x200000, CRC(ca4a803c) SHA1(70b59da8f2532a02e980caba5bb86ec13a4d7ab5) ) + ROM_LOAD16_WORD_SWAP( "mpr-18766.37", 0x600000, 0x200000, CRC(e41892ea) SHA1(9ef5e26db4abf0ed36df63fc246b568e1c5d6cfa) ) + + ROM_REGION( 0xc0000, M1AUDIO_CPU_REGION, ROMREGION_BE|ROMREGION_16BIT ) /* 68K code */ + ROM_LOAD16_WORD_SWAP("epr-18742.7", 0x000000, 0x020000, CRC(1b78da74) SHA1(939b0f2413ae3c11fac11b49ab8b0de2c5e35e61) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM1_REGION, 0 ) // Samples + ROM_LOAD("mpr-18743.32", 0x000000, 0x200000, CRC(17e84e15) SHA1(8437cddc4c4d729e886a5ab076885a54bb7a30d0) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM2_REGION, ROMREGION_ERASE00 ) // Samples + + ROM_REGION( 0x20000, "cpu4", 0) // Communication program + ROM_LOAD16_WORD_SWAP( "epr-18643a.7", 0x000000, 0x020000, CRC(b5e048ec) SHA1(8182e05a2ffebd590a936c1359c81e60caa79c2a) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD +ROM_END + +ROM_START( manxttc ) /* Manx TT Superbike Twin Revision C, Model 2A */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-18822c.12", 0x000000, 0x020000, CRC(c7b3e45a) SHA1(d3a6910bf6efc138e0e40332219b90dea7d6ea56) ) + ROM_LOAD32_WORD( "epr-18823c.13", 0x000002, 0x020000, CRC(6b0c1dfb) SHA1(6da5c071e3ce842a99f928f473d4ccf7165785ac) ) + ROM_LOAD32_WORD( "epr-18824c.14", 0x040000, 0x020000, CRC(352bb817) SHA1(389cbf951ba606acb9ab7bff5cda85d9166e64ff) ) + ROM_LOAD32_WORD( "epr-18825c.15", 0x040002, 0x020000, CRC(f88b036c) SHA1(f6196e8da5e6579fe3fa5c24ab9538964c98e267) ) + + ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-18751.10", 0x000000, 0x200000, CRC(773ad43d) SHA1(4d1601dc08a08b724e33e7cd90a4f22e18cfed9c) ) + ROM_LOAD32_WORD( "mpr-18752.11", 0x000002, 0x200000, CRC(4da3719e) SHA1(24007e4ae3ba1a06321328d14e2bd6002fa1936e) ) + ROM_LOAD32_WORD( "mpr-18749.8", 0x400000, 0x200000, CRC(c3fe0eea) SHA1(ada21405a136935ac4da1a3535c25fccf903f2d1) ) + ROM_LOAD32_WORD( "mpr-18750.9", 0x400002, 0x200000, CRC(40b55494) SHA1(d98ae5518c5d31b155b1a7c4f7d9d67f44d7beae) ) + ROM_LOAD32_WORD( "mpr-18747.6", 0x800000, 0x200000, CRC(a65ec1e8) SHA1(92636bdff0ae4cdb43dfc2986fad2d1b59469323) ) + ROM_LOAD32_WORD( "mpr-18748.7", 0x800002, 0x200000, CRC(375e3748) SHA1(6c2e903dd073b130bcabb347631b876dc868b494) ) + ROM_LOAD32_WORD( "epr-18862.4", 0xc00000, 0x080000, CRC(9adc3a30) SHA1(029db946338f8e0eccace8590082cc96bdf13e31) ) + ROM_LOAD32_WORD( "epr-18863.5", 0xc00002, 0x080000, CRC(603742e9) SHA1(f78a5f7e582d313880c734158bb0fa68b256a58a) ) + ROM_COPY( "main_data", 0xc00000, 0xd00000, 0x100000 ) + ROM_COPY( "main_data", 0xc00000, 0xe00000, 0x100000 ) + ROM_COPY( "main_data", 0xc00000, 0xf00000, 0x100000 ) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-18753.16", 0x000000, 0x200000, CRC(33ddaa0d) SHA1(26f643d6b9cecf08bd249290a670a0edea1b5be4) ) + ROM_LOAD32_WORD( "mpr-18756.20", 0x000002, 0x200000, CRC(28713617) SHA1(fc2a6258387a1bc3fae2109b2dae6dd2a1984ab5) ) + ROM_LOAD32_WORD( "mpr-18754.17", 0x400000, 0x200000, CRC(09aabde5) SHA1(e50646efb2ca59792833ce91398c4efa861ad6d1) ) + ROM_LOAD32_WORD( "mpr-18757.21", 0x400002, 0x200000, CRC(25fc92e9) SHA1(226c4c7289b3b6009c1ffea4a171e3fb4e31a67c) ) + ROM_LOAD32_WORD( "mpr-18755.18", 0x800000, 0x200000, CRC(bf094d9e) SHA1(2cd7130b226a28098191a6caf6fd761bb0bfac7b) ) + ROM_LOAD32_WORD( "mpr-18758.22", 0x800002, 0x200000, CRC(1b5473d0) SHA1(658e33503f6990f4d9a954c63efad5f53d15f3a4) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD( "mpr-18761.28", 0x000000, 0x200000, CRC(4e39ec05) SHA1(50696cd320f1a6492e0c193713acbce085d959cd) ) + ROM_LOAD32_WORD( "mpr-18762.29", 0x000002, 0x200000, CRC(4ab165d8) SHA1(7ff42a4c7236fec76f94f2d0c5537e503bcc98e5) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD( "mpr-18760.25", 0x000000, 0x200000, CRC(4e3a4a89) SHA1(bba6cd2a15b3f963388a3a87880da86b10f6e0a2) ) + ROM_LOAD32_WORD( "mpr-18759.24", 0x000002, 0x200000, CRC(278d8742) SHA1(5f285fc8cfe88c00ba2bbe1b509b49abd38e00ec) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-18826.30", 0x000000, 0x040000, CRC(ed9fe4c1) SHA1(c3dd8a1324a4dc9b012bd9bf21d1f48578870f72) ) /* Sound program for Twin set */ +// ROM_LOAD16_WORD_SWAP( "epr-18924a.30", 0x000000, 0x040000, CRC(ad6f40ec) SHA1(27aa0477dc325162766d459ffe95b61ee65dd28f) ) /* Sound program for ?? set */ + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-18827.31", 0x000000, 0x200000, CRC(58d78ca1) SHA1(95275ed8315c044bfde2f23c10416f22627b34df) ) /* Sound sample for Twin set */ +// ROM_LOAD16_WORD_SWAP( "mpr-18763.31", 0x000000, 0x200000, CRC(1bcb2283) SHA1(a4a8a2f8f0901bfb57778351210ccfc421cacbd4) ) /* Sound sample for DX set */ + ROM_LOAD16_WORD_SWAP( "mpr-18764.32", 0x200000, 0x200000, CRC(0dc6a860) SHA1(cb2ada0f8a592940de11ee781ad4beb5095c3b37) ) + ROM_LOAD16_WORD_SWAP( "mpr-18765.36", 0x400000, 0x200000, CRC(ca4a803c) SHA1(70b59da8f2532a02e980caba5bb86ec13a4d7ab5) ) + ROM_LOAD16_WORD_SWAP( "mpr-18766.37", 0x600000, 0x200000, CRC(e41892ea) SHA1(9ef5e26db4abf0ed36df63fc246b568e1c5d6cfa) ) + + ROM_REGION( 0x20000, "cpu4", 0) // Communication program + ROM_LOAD16_WORD_SWAP( "epr-18643.7", 0x000000, 0x020000, CRC(7166fca7) SHA1(f5d02906b64bb2fd1af8e3772c1b01a4e006c060) ) +// ROM_LOAD16_WORD_SWAP( "epr-18643a.7", 0x000000, 0x020000, CRC(b5e048ec) SHA1(8182e05a2ffebd590a936c1359c81e60caa79c2a) ) /* COMM boards found with either revision */ + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD +ROM_END + +ROM_START( motoraid ) /* Motor Raid, Model 2A, Sega game ID# 833-13232 MOTOR RAID TWIN, Sega ROM board ID# 834-13233 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-20007.12", 0x000000, 0x080000, CRC(f040c108) SHA1(a6a0fa8fb9d62d0cc2ac84ea3ad457953952d980) ) + ROM_LOAD32_WORD( "epr-20008.13", 0x000002, 0x080000, CRC(78976e1a) SHA1(fd15e8c81b3b2f3bdf3bb8d9414b9b8a6f1f000f) ) + + ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-20019.10", 0x0000000, 0x400000, CRC(49053727) SHA1(0543d19d1d60b1d12b4409c1491782f2232da685) ) + ROM_LOAD32_WORD( "mpr-20020.11", 0x0000002, 0x400000, CRC(cc5ddb15) SHA1(19e15e0e9ec1bb5d1b789876778fbb487cfea1ba) ) + ROM_LOAD32_WORD( "mpr-20017.8", 0x0800000, 0x400000, CRC(4e206acd) SHA1(b48b5bd3a2f68c62d16516a037fbd45f49283d23) ) + ROM_LOAD32_WORD( "mpr-20018.9", 0x0800002, 0x400000, CRC(e7ed0e85) SHA1(78a0c72095a664c4b6e529beea46a31ae0a99e5a) ) + ROM_LOAD32_WORD( "mpr-20015.6", 0x1000000, 0x400000, CRC(23427339) SHA1(3e37cfcb4dcc8976805934faf8805cd83acde66e) ) + ROM_LOAD32_WORD( "mpr-20016.7", 0x1000002, 0x400000, CRC(c99a83f4) SHA1(b057d61478f7dc7a32ad233473f1a63498b3779e) ) + ROM_LOAD32_WORD( "epr-20013.4", 0x1800000, 0x080000, CRC(a4478f52) SHA1(28f430319b34e715ca57ce4e01be23a786eab4bc) ) + ROM_LOAD32_WORD( "epr-20014.5", 0x1800002, 0x080000, CRC(1aa541be) SHA1(c4cc61a42e89aaae075ad1b6e8df2907c5710d3e) ) + ROM_COPY( "main_data", 0x1800000, 0x1900000, 0x100000 ) // rgn,srcoffset,offset,length. + ROM_COPY( "main_data", 0x1800000, 0x1a00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1b00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1c00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1d00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1e00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1f00000, 0x100000 ) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-20023.16", 0x0000000, 0x400000, CRC(016be8d6) SHA1(804f69cd342e25cf1bed48e778981d67c4d1c9c7) ) + ROM_LOAD32_WORD( "mpr-20026.20", 0x0000002, 0x400000, CRC(20044a30) SHA1(46be0cc2b8a4a3f530d081d11c6099d814977270) ) + ROM_LOAD32_WORD( "mpr-20024.17", 0x0800000, 0x400000, CRC(62fd2d5b) SHA1(6a386a666ae57da5e47364da7b97da9c913710ef) ) + ROM_LOAD32_WORD( "mpr-20027.21", 0x0800002, 0x400000, CRC(b2504ea6) SHA1(17c23c64b1080ab6a8eb282cabcd7d7612193045) ) + ROM_LOAD32_WORD( "mpr-20025.18", 0x1000000, 0x400000, CRC(d4ecd0be) SHA1(9df0d1db32b818dad28f9eeab3bc19c56d27ec6d) ) + ROM_LOAD32_WORD( "mpr-20028.22", 0x1000002, 0x400000, CRC(3147e0e1) SHA1(9aa0e13c8dc5073a603279a538cc7662531dfd19) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD( "epr-20011.28", 0x000000, 0x100000, CRC(794c026c) SHA1(85abd667491fd019ee18ba256fd580356f4e1fe9) ) + ROM_LOAD32_WORD( "epr-20012.29", 0x000002, 0x100000, CRC(f53db4e3) SHA1(4474610eed52248e5e36be438eff5d39f076b134) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD( "mpr-20022.25", 0x000000, 0x400000, CRC(9e47b3c2) SHA1(c73279e837f56c0417c07ba3c642af28fe9a24fa) ) + ROM_LOAD32_WORD( "mpr-20021.24", 0x000002, 0x400000, CRC(3cbf36cb) SHA1(059cea17f9d6f5960d9fd869c36ffb6fcf230c1a) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-20029.30", 0x000000, 0x080000, CRC(927d31b9) SHA1(e7a18ccf5a0b9ebf18ae1d5518973fa3b4eb4653) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-20030.31", 0x000000, 0x200000, CRC(b70ab686) SHA1(006911ce6332091d17808855c60a72fe928df778) ) + ROM_LOAD16_WORD_SWAP( "mpr-20031.32", 0x200000, 0x200000, CRC(84da70e4) SHA1(77962afcac82589cc7bc852329335676ae3e23cf) ) + ROM_LOAD16_WORD_SWAP( "mpr-20032.36", 0x400000, 0x200000, CRC(15516d35) SHA1(bced0d30f9b6ab579a11ac069cbb9d6d91352246) ) + ROM_LOAD16_WORD_SWAP( "mpr-20033.37", 0x600000, 0x200000, CRC(8c8ed187) SHA1(a9e8e2d38b23716df2e211748c52b6b666f4c111) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD +ROM_END + +ROM_START( motoraiddx ) /* Motor Raid DX, Model 2A, Sega ROM board ID# 834-13231 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-20213.12", 0x000000, 0x080000, CRC(1ad291e5) SHA1(4aa5eddbaaadf5bcb66cf54afba6bd2fb99fb647) ) + ROM_LOAD32_WORD( "epr-20214.13", 0x000002, 0x080000, CRC(12d8b1c2) SHA1(22bfb4c77df77bbebbf90a25aeb774db708269cf) ) + + ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-20019.10", 0x0000000, 0x400000, CRC(49053727) SHA1(0543d19d1d60b1d12b4409c1491782f2232da685) ) + ROM_LOAD32_WORD( "mpr-20020.11", 0x0000002, 0x400000, CRC(cc5ddb15) SHA1(19e15e0e9ec1bb5d1b789876778fbb487cfea1ba) ) + ROM_LOAD32_WORD( "mpr-20017.8", 0x0800000, 0x400000, CRC(4e206acd) SHA1(b48b5bd3a2f68c62d16516a037fbd45f49283d23) ) + ROM_LOAD32_WORD( "mpr-20018.9", 0x0800002, 0x400000, CRC(e7ed0e85) SHA1(78a0c72095a664c4b6e529beea46a31ae0a99e5a) ) + ROM_LOAD32_WORD( "mpr-20015.6", 0x1000000, 0x400000, CRC(23427339) SHA1(3e37cfcb4dcc8976805934faf8805cd83acde66e) ) + ROM_LOAD32_WORD( "mpr-20016.7", 0x1000002, 0x400000, CRC(c99a83f4) SHA1(b057d61478f7dc7a32ad233473f1a63498b3779e) ) + ROM_LOAD32_WORD( "epr-20215.4", 0x1800000, 0x080000, CRC(19249d40) SHA1(22d33d7ebbd77e44d91e969a6ff09436ce777613) ) + ROM_LOAD32_WORD( "epr-20216.5", 0x1800002, 0x080000, CRC(ec963b8d) SHA1(074977b75466300821f19915840d2f2c46a1bebf) ) + ROM_COPY( "main_data", 0x1800000, 0x1900000, 0x100000 ) // rgn,srcoffset,offset,length. + ROM_COPY( "main_data", 0x1800000, 0x1a00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1b00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1c00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1d00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1e00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1f00000, 0x100000 ) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-20023.16", 0x0000000, 0x400000, CRC(016be8d6) SHA1(804f69cd342e25cf1bed48e778981d67c4d1c9c7) ) + ROM_LOAD32_WORD( "mpr-20026.20", 0x0000002, 0x400000, CRC(20044a30) SHA1(46be0cc2b8a4a3f530d081d11c6099d814977270) ) + ROM_LOAD32_WORD( "mpr-20024.17", 0x0800000, 0x400000, CRC(62fd2d5b) SHA1(6a386a666ae57da5e47364da7b97da9c913710ef) ) + ROM_LOAD32_WORD( "mpr-20027.21", 0x0800002, 0x400000, CRC(b2504ea6) SHA1(17c23c64b1080ab6a8eb282cabcd7d7612193045) ) + ROM_LOAD32_WORD( "mpr-20025.18", 0x1000000, 0x400000, CRC(d4ecd0be) SHA1(9df0d1db32b818dad28f9eeab3bc19c56d27ec6d) ) + ROM_LOAD32_WORD( "mpr-20028.22", 0x1000002, 0x400000, CRC(3147e0e1) SHA1(9aa0e13c8dc5073a603279a538cc7662531dfd19) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD( "epr-20011.28", 0x000000, 0x100000, CRC(794c026c) SHA1(85abd667491fd019ee18ba256fd580356f4e1fe9) ) + ROM_LOAD32_WORD( "epr-20012.29", 0x000002, 0x100000, CRC(f53db4e3) SHA1(4474610eed52248e5e36be438eff5d39f076b134) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD( "mpr-20022.25", 0x000000, 0x400000, CRC(9e47b3c2) SHA1(c73279e837f56c0417c07ba3c642af28fe9a24fa) ) + ROM_LOAD32_WORD( "mpr-20021.24", 0x000002, 0x400000, CRC(3cbf36cb) SHA1(059cea17f9d6f5960d9fd869c36ffb6fcf230c1a) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-20222.30", 0x000000, 0x080000, CRC(079d28e6) SHA1(85a863cf5e53a88e2331898e2505ac1063cdb9ad) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-20030.31", 0x000000, 0x200000, CRC(b70ab686) SHA1(006911ce6332091d17808855c60a72fe928df778) ) + ROM_LOAD16_WORD_SWAP( "mpr-20031.32", 0x200000, 0x200000, CRC(84da70e4) SHA1(77962afcac82589cc7bc852329335676ae3e23cf) ) + ROM_LOAD16_WORD_SWAP( "mpr-20032.36", 0x400000, 0x200000, CRC(15516d35) SHA1(bced0d30f9b6ab579a11ac069cbb9d6d91352246) ) + ROM_LOAD16_WORD_SWAP( "mpr-20033.37", 0x600000, 0x200000, CRC(8c8ed187) SHA1(a9e8e2d38b23716df2e211748c52b6b666f4c111) ) + + ROM_REGION( 0x20000, "cpu4", 0) // Communication program + ROM_LOAD16_WORD_SWAP( "epr-18643a.7", 0x000000, 0x020000, CRC(b5e048ec) SHA1(8182e05a2ffebd590a936c1359c81e60caa79c2a) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD +ROM_END + +ROM_START( skytargt ) /* Sky Target, Model 2A */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-18406.12", 0x000000, 0x080000, CRC(fde9c00a) SHA1(01cd519daaf6138d9df4940bf8bb5923a1f163df) ) + ROM_LOAD32_WORD( "epr-18407.13", 0x000002, 0x080000, CRC(35f8b529) SHA1(faf6dcf8f345c1e7968823f2dba60afcd88f37c2) ) + + ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-18415.10", 0x0000000, 0x400000, CRC(d7a1bbd7) SHA1(3061cc68755ca36255f325135aa44659afc3498c) ) + ROM_LOAD32_WORD( "mpr-18416.11", 0x0000002, 0x400000, CRC(b77c9243) SHA1(6ffeef418364df9e08398c7564142cbf5750beb2) ) + ROM_LOAD32_WORD( "mpr-18417.8", 0x0800000, 0x400000, CRC(a0d03f63) SHA1(88b97a76f0a85a3977915808eee4d64b69734e88) ) + ROM_LOAD32_WORD( "mpr-18418.9", 0x0800002, 0x400000, CRC(c7a6f97f) SHA1(cf7c6887519e53d7fa321a2ad888b1673e16565b) ) + ROM_LOAD32_WORD( "epr-18404.6", 0x1000000, 0x080000, CRC(f1407ec4) SHA1(d6805faea657ea0f998fb2470d7d24aa78a02bd4) ) + ROM_LOAD32_WORD( "epr-18405.7", 0x1000002, 0x080000, CRC(00b40f9e) SHA1(21b6b390d8635349ba76899acea176954a24985e) ) + ROM_COPY( "main_data", 0x1000000, 0x1100000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1200000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1300000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1400000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1500000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1600000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1700000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1800000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1900000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1a00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1b00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1c00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1d00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1e00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1f00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + ROM_LOAD32_WORD( "mpr-18420.28", 0x000000, 0x200000, CRC(92b87817) SHA1(b6949b745d0bedeecd6d0240f8911cb345c16d8d) ) + ROM_LOAD32_WORD( "mpr-18419.29", 0x000002, 0x200000, CRC(74542d87) SHA1(37230e96dd526fb47fcbde5778e5466d8955a969) ) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-18413.16", 0x000000, 0x400000, CRC(1c4d416c) SHA1(2bd6eae4ab5751d485be105a06776fccd3c48d21) ) + ROM_LOAD32_WORD( "mpr-18409.20", 0x000002, 0x400000, CRC(666037ef) SHA1(6f622a82fd5ffd7a4692b5bf51b76755053a674b) ) + ROM_LOAD32_WORD( "mpr-18414.17", 0x800000, 0x400000, CRC(858885ba) SHA1(1729f6ff689a462a3d6e303ebc2dac323145a67c) ) + ROM_LOAD32_WORD( "mpr-18410.21", 0x800002, 0x400000, CRC(b821a695) SHA1(139cbba0ceffa83c0f9925258944ec8a414b3040) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD( "mpr-18411.24", 0x000002, 0x400000, CRC(9c2dc40c) SHA1(842a647a70ef29a8c775e88c0bcbc63782496bba) ) + ROM_LOAD32_WORD( "mpr-18412.25", 0x000000, 0x400000, CRC(4db52f8b) SHA1(66796f6c20e680a87e8939a70692680b1dd0b324) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-18408.30", 0x000000, 0x080000, CRC(6deb9657) SHA1(30e1894432a0765c64b93dd5ca7ca17ef58ac6c0) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-18424.31", 0x000000, 0x200000, CRC(590a4338) SHA1(826f167d7a4f5d30466b2f75f0123187c29c2d69) ) + ROM_LOAD16_WORD_SWAP( "mpr-18423.32", 0x200000, 0x200000, CRC(c356d765) SHA1(ae69c9d4e333579d826178d2863156dc784aedef) ) + ROM_LOAD16_WORD_SWAP( "mpr-18422.36", 0x400000, 0x200000, CRC(b4f3cea6) SHA1(49669be09e10dfae7fddce0fc4e415466cb29566) ) + ROM_LOAD16_WORD_SWAP( "mpr-18421.37", 0x600000, 0x200000, CRC(00522390) SHA1(5dbbf2ba008adad36929fcecb7c2c1e5ffd12618) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD +ROM_END + +ROM_START( vcop2 ) /* Virtua Cop 2, Model 2A, Sega Game ID# 833-12266, ROM board ID# 834-12267 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-18524.12", 0x000000, 0x080000, CRC(1858988b) SHA1(2979f8470cc31e6c5c32c6fec1a87dbd29b52309) ) + ROM_LOAD32_WORD( "epr-18525.13", 0x000002, 0x080000, CRC(0c13df3f) SHA1(6b4188f04aad80b89f1826e8ca47cff763980410) ) + ROM_LOAD32_WORD( "epr-18518.14", 0x100000, 0x080000, CRC(7842951b) SHA1(bed4ec9a5e59807d17e5e602bdaf3c68fcba08b6) ) + ROM_LOAD32_WORD( "epr-18519.15", 0x100002, 0x080000, CRC(31a30edc) SHA1(caf3c2676508a2ed032d3657ac640a257f04bdd4) ) + + ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-18516.10", 0x000000, 0x200000, CRC(a3928ff0) SHA1(5a9695fb5eda394a1111a05ee5fb9cce29970e91) ) + ROM_LOAD32_WORD( "mpr-18517.11", 0x000002, 0x200000, CRC(4bd73da4) SHA1(a4434bce019729e2148a95e3a6dea38de7f789c1) ) + ROM_LOAD32_WORD( "mpr-18514.8", 0x400000, 0x200000, CRC(791283c5) SHA1(006fb22eefdd9205ede9a74fe53cbffe8c8fd45b) ) + ROM_LOAD32_WORD( "mpr-18515.9", 0x400002, 0x200000, CRC(6ba1ffec) SHA1(70f493aa4eb93edce8dd5b7b532d1f50f81069ce) ) + ROM_LOAD32_WORD( "mpr-18522.6", 0x800000, 0x200000, CRC(61d18536) SHA1(cc467cb26a8fccc48837d000fe9e1c41b0c0f4f9) ) + ROM_LOAD32_WORD( "mpr-18523.7", 0x800002, 0x200000, CRC(61d08dc4) SHA1(40d8231d184582c0fc01ad874371aaec7dfcc337) ) + ROM_LOAD32_WORD( "epr-18520.4", 0xc00000, 0x080000, CRC(1d4ec5e8) SHA1(44c4b5560d150909342e4182496f136c8c5e2edb) ) + ROM_LOAD32_WORD( "epr-18521.5", 0xc00002, 0x080000, CRC(b8b3781c) SHA1(11956fe912c34d6a86a6b91d55987f6bead73473) ) + ROM_COPY( "main_data", 0xc00000, 0xd00000, 0x100000 ) + ROM_COPY( "main_data", 0xc00000, 0xe00000, 0x100000 ) + ROM_COPY( "main_data", 0xc00000, 0xf00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-18513.16", 0x000000, 0x200000, CRC(777a3633) SHA1(edc2798c4d88975ce67b54fc0db008e7d24db6ef) ) + ROM_LOAD32_WORD( "mpr-18510.20", 0x000002, 0x200000, CRC(e83de997) SHA1(8a8597aa31609663869e584cc5fad6e4b84f7dbe) ) + + ROM_REGION( 0x400000, "textures", 0 ) // Textures + /* TODO: Wrong labels? */ + ROM_LOAD32_WORD( "mpr-18511.24", 0x000002, 0x200000, CRC(cae77a4f) SHA1(f21474486f0dc4092cbad4566deea8a952862ab7) ) + ROM_LOAD32_WORD( "mpr-18512.25", 0x000000, 0x200000, CRC(d9bc7e71) SHA1(774eba886083b0dad9a47519c5801e44346312cf) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-18530.30", 0x000000, 0x080000, CRC(ac9c8357) SHA1(ad297c7fecaa9b877f0dd31e859983816947e437) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-18529.31", 0x000000, 0x200000, CRC(f76715b1) SHA1(258418c1cb37338a694e48f3b48fadfae5f40239) ) + ROM_LOAD16_WORD_SWAP( "mpr-18528.32", 0x200000, 0x200000, CRC(287a2f9a) SHA1(78ba93ab90322152efc37f7130073b0dc516ef5d) ) + ROM_LOAD16_WORD_SWAP( "mpr-18527.36", 0x400000, 0x200000, CRC(e6a49314) SHA1(26563f425f2f0906ae9278fe5de02955653d49fe) ) + ROM_LOAD16_WORD_SWAP( "mpr-18526.37", 0x600000, 0x200000, CRC(6516d9b5) SHA1(8f13cb02c76f7b7cd11f3c3772ff13302d55e9c3) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD +ROM_END + +/* Dynamite Cop program rom EPR numbers via "DYNAMITE COP ROM CVT MANUAL" 421-9897-01: + + USA Export Korea Japan* + ------------------------------------------------------------ +Model2a: + epr-20926.12 epr-20930.12 epr-20971.12 epr-20922.12 + epr-20927.13 epr-20931.13 epr-20972.13 epr-20923.13 + epr-20928.14 epr-20932.14 epr-20973.14 epr-20924.14 + epr-20929.15 epr-20933.15 epr-20974.15 epr-20925.15 +Model2b: + epr-20938.13 epr-20942.13 epr-20975.13 epr-20934.13 + epr-20939.14 epr-20943.14 epr-20976.14 epr-20935.14 + epr-20940.15 epr-20944.15 epr-20977.15 epr-20936.15 + epr-20941.16 epr-20945.16 epr-20978.16 epr-20937.16 +Model2c: + epr-20950.13 epr-20954.13 epr-20979.13 epr-20946.13 + epr-20951.14 epr-20955.14 epr-20980.14 epr-20947.14 + epr-20952.15 epr-20956.15 epr-20981.15 epr-20948.15 + epr-20953.16 epr-20957.16 epr-20982.16 epr-20949.16 + +* The numbers for the Japan sets were not listed, but are shown for comparision + +In Dynamite Deka 2 manual 420-6406-01 it states there are C-CRX versions of the +USA, Export and Korea versions as well as the Japan version. + +*/ + +ROM_START( dynamcop ) /* Dynamite Cop (Export), Model 2A, Sega Game ID# 833-11341, ROM board ID# 834-11342 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-20930.12", 0x000000, 0x080000, CRC(b8fc8ff7) SHA1(53b0f9dc8494effa077170ddced2d95f43a5f134) ) + ROM_LOAD32_WORD("epr-20931.13", 0x000002, 0x080000, CRC(89d13f88) SHA1(5e266b5e153a0d9a57360cfd1af81e3a58a2fb7d) ) + ROM_LOAD32_WORD("epr-20932.14", 0x100000, 0x080000, CRC(618a68bf) SHA1(3022283dded4d08d790d034b6d543c0397b5bf5a) ) + ROM_LOAD32_WORD("epr-20933.15", 0x100002, 0x080000, CRC(13abe49c) SHA1(a741a0205c1b3664ab4d09d6d991a768269a79ea) ) + + ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-20797.10", 0x0000000, 0x400000, CRC(87bab1e4) SHA1(af2b2d82364621a1528d6ed59fbfbf15dc93ee72) ) + ROM_LOAD32_WORD("mpr-20798.11", 0x0000002, 0x400000, CRC(40dd752b) SHA1(8c2e210ac7c7b133ba9befc79a07c4ca6b4e3f18) ) + ROM_LOAD32_WORD("mpr-20795.8", 0x0800000, 0x400000, CRC(0ef85e12) SHA1(97c657edd98cde6f0780a04a7711e5b370087a60) ) + ROM_LOAD32_WORD("mpr-20796.9", 0x0800002, 0x400000, CRC(870139cb) SHA1(24fda2cd458cf7a3db485564c02ac61d30cbdf5e) ) + ROM_LOAD32_WORD("mpr-20793.6", 0x1000000, 0x400000, CRC(42ea08f8) SHA1(e70b55709067628ea0bf3f5190a300100b61eed1) ) + ROM_LOAD32_WORD("mpr-20794.7", 0x1000002, 0x400000, CRC(8e5cd1db) SHA1(d90e86d38bda12f2d0f99e23a42928f05bde3ea8) ) + ROM_LOAD32_WORD("mpr-20791.4", 0x1800000, 0x400000, CRC(4883d0df) SHA1(b98af63e81f6c1b2766d7e96acbd1821bba000d4) ) + ROM_LOAD32_WORD("mpr-20792.5", 0x1800002, 0x400000, CRC(47becfa2) SHA1(a333885872a64b322f3cb464a70352d73654b1b3) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-20799.16", 0x0000000, 0x400000, CRC(424571bf) SHA1(18a4e8d0e968fff3b645b59a0023b0ef38d51924) ) + ROM_LOAD32_WORD("mpr-20803.20", 0x0000002, 0x400000, CRC(61a8ad52) SHA1(0215b5de6d10f0852ac0ca4e10475e10243e39c7) ) + ROM_LOAD32_WORD("mpr-20800.17", 0x0800000, 0x400000, CRC(3c2ee808) SHA1(dc0c470c6b410ab991ef0e09ce1cc0f63c8a204d) ) + ROM_LOAD32_WORD("mpr-20804.21", 0x0800002, 0x400000, CRC(03b35cb8) SHA1(7bd2ae89f9cc7c0570dbaffe5f54aea2dfa1b39e) ) + ROM_LOAD32_WORD("mpr-20801.18", 0x1000000, 0x400000, CRC(c6914173) SHA1(d0861366c4123c833a325df5345f951386a94d1a) ) + ROM_LOAD32_WORD("mpr-20805.22", 0x1000002, 0x400000, CRC(f6605ede) SHA1(7c95bfe2e95bae3d59c3c9efe1f40b5bc292ad44) ) + ROM_LOAD32_WORD("mpr-20802.19", 0x1800000, 0x400000, CRC(d11b5267) SHA1(b90909849fbe0f62d5ec7c38608c84e7fa845ebf) ) + ROM_LOAD32_WORD("mpr-20806.23", 0x1800002, 0x400000, CRC(0c942073) SHA1(5f32a56857e2213b110c32deea184dba882e34b8) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-20809.25", 0x0000000, 0x400000, CRC(3b7b4622) SHA1(c6f1a1fd2684f352d3846b7f859b0405fa2d667a) ) + ROM_LOAD32_WORD("mpr-20807.24", 0x0000002, 0x400000, CRC(1241e0f2) SHA1(3f7fa1d7d3d398bc8d5295bc1df6fe11405d20d9) ) + ROM_LOAD32_WORD("mpr-20810.27", 0x0800000, 0x400000, CRC(838a10a7) SHA1(a658f1864829058b1d419e7c001e47cd0ab06a20) ) + ROM_LOAD32_WORD("mpr-20808.26", 0x0800002, 0x400000, CRC(706bd495) SHA1(f857b303afda6301b19d97dfe5c313126261716e) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-20811.30", 0x000000, 0x080000, CRC(a154b83e) SHA1(2640c6b6966f4a888329e583b6b713bd0e779b6b) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-20812.31", 0x000000, 0x200000, CRC(695b6088) SHA1(09682d18144e60d740a9d7a3e19db6f76fa581f1) ) + ROM_LOAD16_WORD_SWAP("mpr-20813.32", 0x200000, 0x200000, CRC(1908679c) SHA1(32913385f09da2e43af0c4a4612b955527bfe759) ) + ROM_LOAD16_WORD_SWAP("mpr-20814.36", 0x400000, 0x200000, CRC(e8ebc74c) SHA1(731ce721bb9e148f3a9f7fbe569522567a681c4e) ) + ROM_LOAD16_WORD_SWAP("mpr-20815.37", 0x600000, 0x200000, CRC(1b5aaae4) SHA1(32b4bf6c096fdccdd5d8f1ddb6c27d3389a52234) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD + + // 1998 317-0236-COM Model 2 + ROM_PARAMETER( ":315_5881:key", "2c2a4a93" ) +ROM_END + +ROM_START( dyndeka2 ) /* Dynamite Deka 2 (Japan), Model 2A */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-20922.12", 0x000000, 0x080000, CRC(0a8b5604) SHA1(4076998fc600c1df3bb5ef48d42681c01e651495) ) + ROM_LOAD32_WORD("epr-20923.13", 0x000002, 0x080000, CRC(83be73d4) SHA1(1404a9c79cd2bae13f60e5e008307417324c3666) ) + ROM_LOAD32_WORD("epr-20924.14", 0x100000, 0x080000, CRC(618a68bf) SHA1(3022283dded4d08d790d034b6d543c0397b5bf5a) ) /* same as epr-20932.14 listed above */ + ROM_LOAD32_WORD("epr-20925.15", 0x100002, 0x080000, CRC(13abe49c) SHA1(a741a0205c1b3664ab4d09d6d991a768269a79ea) ) /* same as epr-20933.15 listed above */ + + ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-20797.10", 0x0000000, 0x400000, CRC(87bab1e4) SHA1(af2b2d82364621a1528d6ed59fbfbf15dc93ee72) ) + ROM_LOAD32_WORD("mpr-20798.11", 0x0000002, 0x400000, CRC(40dd752b) SHA1(8c2e210ac7c7b133ba9befc79a07c4ca6b4e3f18) ) + ROM_LOAD32_WORD("mpr-20795.8", 0x0800000, 0x400000, CRC(0ef85e12) SHA1(97c657edd98cde6f0780a04a7711e5b370087a60) ) + ROM_LOAD32_WORD("mpr-20796.9", 0x0800002, 0x400000, CRC(870139cb) SHA1(24fda2cd458cf7a3db485564c02ac61d30cbdf5e) ) + ROM_LOAD32_WORD("mpr-20793.6", 0x1000000, 0x400000, CRC(42ea08f8) SHA1(e70b55709067628ea0bf3f5190a300100b61eed1) ) + ROM_LOAD32_WORD("mpr-20794.7", 0x1000002, 0x400000, CRC(8e5cd1db) SHA1(d90e86d38bda12f2d0f99e23a42928f05bde3ea8) ) + ROM_LOAD32_WORD("mpr-20791.4", 0x1800000, 0x400000, CRC(4883d0df) SHA1(b98af63e81f6c1b2766d7e96acbd1821bba000d4) ) + ROM_LOAD32_WORD("mpr-20792.5", 0x1800002, 0x400000, CRC(47becfa2) SHA1(a333885872a64b322f3cb464a70352d73654b1b3) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-20799.16", 0x0000000, 0x400000, CRC(424571bf) SHA1(18a4e8d0e968fff3b645b59a0023b0ef38d51924) ) + ROM_LOAD32_WORD("mpr-20803.20", 0x0000002, 0x400000, CRC(61a8ad52) SHA1(0215b5de6d10f0852ac0ca4e10475e10243e39c7) ) + ROM_LOAD32_WORD("mpr-20800.17", 0x0800000, 0x400000, CRC(3c2ee808) SHA1(dc0c470c6b410ab991ef0e09ce1cc0f63c8a204d) ) + ROM_LOAD32_WORD("mpr-20804.21", 0x0800002, 0x400000, CRC(03b35cb8) SHA1(7bd2ae89f9cc7c0570dbaffe5f54aea2dfa1b39e) ) + ROM_LOAD32_WORD("mpr-20801.18", 0x1000000, 0x400000, CRC(c6914173) SHA1(d0861366c4123c833a325df5345f951386a94d1a) ) + ROM_LOAD32_WORD("mpr-20805.22", 0x1000002, 0x400000, CRC(f6605ede) SHA1(7c95bfe2e95bae3d59c3c9efe1f40b5bc292ad44) ) + ROM_LOAD32_WORD("mpr-20802.19", 0x1800000, 0x400000, CRC(d11b5267) SHA1(b90909849fbe0f62d5ec7c38608c84e7fa845ebf) ) + ROM_LOAD32_WORD("mpr-20806.23", 0x1800002, 0x400000, CRC(0c942073) SHA1(5f32a56857e2213b110c32deea184dba882e34b8) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-20809.25", 0x0000000, 0x400000, CRC(3b7b4622) SHA1(c6f1a1fd2684f352d3846b7f859b0405fa2d667a) ) + ROM_LOAD32_WORD("mpr-20807.24", 0x0000002, 0x400000, CRC(1241e0f2) SHA1(3f7fa1d7d3d398bc8d5295bc1df6fe11405d20d9) ) + ROM_LOAD32_WORD("mpr-20810.27", 0x0800000, 0x400000, CRC(838a10a7) SHA1(a658f1864829058b1d419e7c001e47cd0ab06a20) ) + ROM_LOAD32_WORD("mpr-20808.26", 0x0800002, 0x400000, CRC(706bd495) SHA1(f857b303afda6301b19d97dfe5c313126261716e) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-20811.30", 0x000000, 0x080000, CRC(a154b83e) SHA1(2640c6b6966f4a888329e583b6b713bd0e779b6b) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-20812.31", 0x000000, 0x200000, CRC(695b6088) SHA1(09682d18144e60d740a9d7a3e19db6f76fa581f1) ) + ROM_LOAD16_WORD_SWAP("mpr-20813.32", 0x200000, 0x200000, CRC(1908679c) SHA1(32913385f09da2e43af0c4a4612b955527bfe759) ) + ROM_LOAD16_WORD_SWAP("mpr-20814.36", 0x400000, 0x200000, CRC(e8ebc74c) SHA1(731ce721bb9e148f3a9f7fbe569522567a681c4e) ) + ROM_LOAD16_WORD_SWAP("mpr-20815.37", 0x600000, 0x200000, CRC(1b5aaae4) SHA1(32b4bf6c096fdccdd5d8f1ddb6c27d3389a52234) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD + + // 1998 317-0236-COM Model 2 + ROM_PARAMETER( ":315_5881:key", "2c2a4a93" ) +ROM_END + +ROM_START( dynamcopb ) /* Dynamite Cop (Export), Model 2B */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-20944.15", 0x000000, 0x080000, CRC(29b142f2) SHA1(b81d1ee7203b2f5fb6db4ff4185f4071e99aaedf) ) + ROM_LOAD32_WORD("epr-20945.16", 0x000002, 0x080000, CRC(c495912e) SHA1(1a45296a5554923cb52b38586e40ceda2517f1bf) ) + ROM_LOAD32_WORD("epr-20942.13", 0x100000, 0x080000, CRC(618a68bf) SHA1(3022283dded4d08d790d034b6d543c0397b5bf5a) ) /* same as epr-20932.14 listed above */ + ROM_LOAD32_WORD("epr-20943.14", 0x100002, 0x080000, CRC(13abe49c) SHA1(a741a0205c1b3664ab4d09d6d991a768269a79ea) ) /* same as epr-20933.15 listed above */ + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-20797.10", 0x0000000, 0x400000, CRC(87bab1e4) SHA1(af2b2d82364621a1528d6ed59fbfbf15dc93ee72) ) + ROM_LOAD32_WORD("mpr-20798.11", 0x0000002, 0x400000, CRC(40dd752b) SHA1(8c2e210ac7c7b133ba9befc79a07c4ca6b4e3f18) ) + ROM_LOAD32_WORD("mpr-20795.8", 0x0800000, 0x400000, CRC(0ef85e12) SHA1(97c657edd98cde6f0780a04a7711e5b370087a60) ) + ROM_LOAD32_WORD("mpr-20796.9", 0x0800002, 0x400000, CRC(870139cb) SHA1(24fda2cd458cf7a3db485564c02ac61d30cbdf5e) ) + ROM_LOAD32_WORD("mpr-20793.6", 0x1000000, 0x400000, CRC(42ea08f8) SHA1(e70b55709067628ea0bf3f5190a300100b61eed1) ) + ROM_LOAD32_WORD("mpr-20794.7", 0x1000002, 0x400000, CRC(8e5cd1db) SHA1(d90e86d38bda12f2d0f99e23a42928f05bde3ea8) ) + ROM_LOAD32_WORD("mpr-20791.4", 0x1800000, 0x400000, CRC(4883d0df) SHA1(b98af63e81f6c1b2766d7e96acbd1821bba000d4) ) + ROM_LOAD32_WORD("mpr-20792.5", 0x1800002, 0x400000, CRC(47becfa2) SHA1(a333885872a64b322f3cb464a70352d73654b1b3) ) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-20799.16", 0x0000000, 0x400000, CRC(424571bf) SHA1(18a4e8d0e968fff3b645b59a0023b0ef38d51924) ) + ROM_LOAD32_WORD("mpr-20803.20", 0x0000002, 0x400000, CRC(61a8ad52) SHA1(0215b5de6d10f0852ac0ca4e10475e10243e39c7) ) + ROM_LOAD32_WORD("mpr-20800.17", 0x0800000, 0x400000, CRC(3c2ee808) SHA1(dc0c470c6b410ab991ef0e09ce1cc0f63c8a204d) ) + ROM_LOAD32_WORD("mpr-20804.21", 0x0800002, 0x400000, CRC(03b35cb8) SHA1(7bd2ae89f9cc7c0570dbaffe5f54aea2dfa1b39e) ) + ROM_LOAD32_WORD("mpr-20801.18", 0x1000000, 0x400000, CRC(c6914173) SHA1(d0861366c4123c833a325df5345f951386a94d1a) ) + ROM_LOAD32_WORD("mpr-20805.22", 0x1000002, 0x400000, CRC(f6605ede) SHA1(7c95bfe2e95bae3d59c3c9efe1f40b5bc292ad44) ) + ROM_LOAD32_WORD("mpr-20802.19", 0x1800000, 0x400000, CRC(d11b5267) SHA1(b90909849fbe0f62d5ec7c38608c84e7fa845ebf) ) + ROM_LOAD32_WORD("mpr-20806.23", 0x1800002, 0x400000, CRC(0c942073) SHA1(5f32a56857e2213b110c32deea184dba882e34b8) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-20809.25", 0x0000000, 0x400000, CRC(3b7b4622) SHA1(c6f1a1fd2684f352d3846b7f859b0405fa2d667a) ) + ROM_LOAD32_WORD("mpr-20807.24", 0x0000002, 0x400000, CRC(1241e0f2) SHA1(3f7fa1d7d3d398bc8d5295bc1df6fe11405d20d9) ) + ROM_LOAD32_WORD("mpr-20810.27", 0x0800000, 0x400000, CRC(838a10a7) SHA1(a658f1864829058b1d419e7c001e47cd0ab06a20) ) + ROM_LOAD32_WORD("mpr-20808.26", 0x0800002, 0x400000, CRC(706bd495) SHA1(f857b303afda6301b19d97dfe5c313126261716e) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-20811.30", 0x000000, 0x080000, CRC(a154b83e) SHA1(2640c6b6966f4a888329e583b6b713bd0e779b6b) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-20812.31", 0x000000, 0x200000, CRC(695b6088) SHA1(09682d18144e60d740a9d7a3e19db6f76fa581f1) ) + ROM_LOAD16_WORD_SWAP("mpr-20813.32", 0x200000, 0x200000, CRC(1908679c) SHA1(32913385f09da2e43af0c4a4612b955527bfe759) ) + ROM_LOAD16_WORD_SWAP("mpr-20814.36", 0x400000, 0x200000, CRC(e8ebc74c) SHA1(731ce721bb9e148f3a9f7fbe569522567a681c4e) ) + ROM_LOAD16_WORD_SWAP("mpr-20815.37", 0x600000, 0x200000, CRC(1b5aaae4) SHA1(32b4bf6c096fdccdd5d8f1ddb6c27d3389a52234) ) + + // 1998 317-0236-COM Model 2 + ROM_PARAMETER( ":315_5881:key", "2c2a4a93" ) +ROM_END + +ROM_START( dyndeka2b ) /* Dynamite Deka 2 (Japan), Model 2B */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-20936.15", 0x000000, 0x080000, CRC(23ef98f2) SHA1(0a106125ed4a2569b54924130ca2ffa05acf2322) ) + ROM_LOAD32_WORD("epr-20937.16", 0x000002, 0x080000, CRC(25a14e00) SHA1(ebdd21f269fd8a0798306e349d2985eead7e989f) ) + ROM_LOAD32_WORD("epr-20934.13", 0x100000, 0x080000, CRC(618a68bf) SHA1(3022283dded4d08d790d034b6d543c0397b5bf5a) ) /* same as epr-20932.14 listed above */ + ROM_LOAD32_WORD("epr-20935.14", 0x100002, 0x080000, CRC(13abe49c) SHA1(a741a0205c1b3664ab4d09d6d991a768269a79ea) ) /* same as epr-20933.15 listed above */ + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-20797.10", 0x0000000, 0x400000, CRC(87bab1e4) SHA1(af2b2d82364621a1528d6ed59fbfbf15dc93ee72) ) + ROM_LOAD32_WORD("mpr-20798.11", 0x0000002, 0x400000, CRC(40dd752b) SHA1(8c2e210ac7c7b133ba9befc79a07c4ca6b4e3f18) ) + ROM_LOAD32_WORD("mpr-20795.8", 0x0800000, 0x400000, CRC(0ef85e12) SHA1(97c657edd98cde6f0780a04a7711e5b370087a60) ) + ROM_LOAD32_WORD("mpr-20796.9", 0x0800002, 0x400000, CRC(870139cb) SHA1(24fda2cd458cf7a3db485564c02ac61d30cbdf5e) ) + ROM_LOAD32_WORD("mpr-20793.6", 0x1000000, 0x400000, CRC(42ea08f8) SHA1(e70b55709067628ea0bf3f5190a300100b61eed1) ) + ROM_LOAD32_WORD("mpr-20794.7", 0x1000002, 0x400000, CRC(8e5cd1db) SHA1(d90e86d38bda12f2d0f99e23a42928f05bde3ea8) ) + ROM_LOAD32_WORD("mpr-20791.4", 0x1800000, 0x400000, CRC(4883d0df) SHA1(b98af63e81f6c1b2766d7e96acbd1821bba000d4) ) + ROM_LOAD32_WORD("mpr-20792.5", 0x1800002, 0x400000, CRC(47becfa2) SHA1(a333885872a64b322f3cb464a70352d73654b1b3) ) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-20799.16", 0x0000000, 0x400000, CRC(424571bf) SHA1(18a4e8d0e968fff3b645b59a0023b0ef38d51924) ) + ROM_LOAD32_WORD("mpr-20803.20", 0x0000002, 0x400000, CRC(61a8ad52) SHA1(0215b5de6d10f0852ac0ca4e10475e10243e39c7) ) + ROM_LOAD32_WORD("mpr-20800.17", 0x0800000, 0x400000, CRC(3c2ee808) SHA1(dc0c470c6b410ab991ef0e09ce1cc0f63c8a204d) ) + ROM_LOAD32_WORD("mpr-20804.21", 0x0800002, 0x400000, CRC(03b35cb8) SHA1(7bd2ae89f9cc7c0570dbaffe5f54aea2dfa1b39e) ) + ROM_LOAD32_WORD("mpr-20801.18", 0x1000000, 0x400000, CRC(c6914173) SHA1(d0861366c4123c833a325df5345f951386a94d1a) ) + ROM_LOAD32_WORD("mpr-20805.22", 0x1000002, 0x400000, CRC(f6605ede) SHA1(7c95bfe2e95bae3d59c3c9efe1f40b5bc292ad44) ) + ROM_LOAD32_WORD("mpr-20802.19", 0x1800000, 0x400000, CRC(d11b5267) SHA1(b90909849fbe0f62d5ec7c38608c84e7fa845ebf) ) + ROM_LOAD32_WORD("mpr-20806.23", 0x1800002, 0x400000, CRC(0c942073) SHA1(5f32a56857e2213b110c32deea184dba882e34b8) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-20809.25", 0x0000000, 0x400000, CRC(3b7b4622) SHA1(c6f1a1fd2684f352d3846b7f859b0405fa2d667a) ) + ROM_LOAD32_WORD("mpr-20807.24", 0x0000002, 0x400000, CRC(1241e0f2) SHA1(3f7fa1d7d3d398bc8d5295bc1df6fe11405d20d9) ) + ROM_LOAD32_WORD("mpr-20810.27", 0x0800000, 0x400000, CRC(838a10a7) SHA1(a658f1864829058b1d419e7c001e47cd0ab06a20) ) + ROM_LOAD32_WORD("mpr-20808.26", 0x0800002, 0x400000, CRC(706bd495) SHA1(f857b303afda6301b19d97dfe5c313126261716e) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-20811.30", 0x000000, 0x080000, CRC(a154b83e) SHA1(2640c6b6966f4a888329e583b6b713bd0e779b6b) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-20812.31", 0x000000, 0x200000, CRC(695b6088) SHA1(09682d18144e60d740a9d7a3e19db6f76fa581f1) ) + ROM_LOAD16_WORD_SWAP("mpr-20813.32", 0x200000, 0x200000, CRC(1908679c) SHA1(32913385f09da2e43af0c4a4612b955527bfe759) ) + ROM_LOAD16_WORD_SWAP("mpr-20814.36", 0x400000, 0x200000, CRC(e8ebc74c) SHA1(731ce721bb9e148f3a9f7fbe569522567a681c4e) ) + ROM_LOAD16_WORD_SWAP("mpr-20815.37", 0x600000, 0x200000, CRC(1b5aaae4) SHA1(32b4bf6c096fdccdd5d8f1ddb6c27d3389a52234) ) + + // 1998 317-0236-COM Model 2 + ROM_PARAMETER( ":315_5881:key", "2c2a4a93" ) +ROM_END + +ROM_START( dynamcopc ) /* Dynamite Cop (USA), Model 2C */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-20952.15", 0x000000, 0x080000, CRC(ec8bc896) SHA1(85deb1dc1348730a0c9b6ce3679582e7894ff2ed) ) + ROM_LOAD32_WORD("epr-20953.16", 0x000002, 0x080000, CRC(a8276ffd) SHA1(9bea99c043775c00742c20e2f917d211dca09cc5) ) + ROM_LOAD32_WORD("epr-20950.13", 0x100000, 0x080000, CRC(618a68bf) SHA1(3022283dded4d08d790d034b6d543c0397b5bf5a) ) /* same as epr-20932.14 listed above */ + ROM_LOAD32_WORD("epr-20951.14", 0x100002, 0x080000, CRC(13abe49c) SHA1(a741a0205c1b3664ab4d09d6d991a768269a79ea) ) /* same as epr-20933.15 listed above */ + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-20797.10", 0x0000000, 0x400000, CRC(87bab1e4) SHA1(af2b2d82364621a1528d6ed59fbfbf15dc93ee72) ) /* Located at position 11 on 2C-CRX rom board */ + ROM_LOAD32_WORD("mpr-20798.11", 0x0000002, 0x400000, CRC(40dd752b) SHA1(8c2e210ac7c7b133ba9befc79a07c4ca6b4e3f18) ) /* Located at position 12 on 2C-CRX rom board */ + ROM_LOAD32_WORD("mpr-20795.8", 0x0800000, 0x400000, CRC(0ef85e12) SHA1(97c657edd98cde6f0780a04a7711e5b370087a60) ) /* Located at position 9 on 2C-CRX rom board */ + ROM_LOAD32_WORD("mpr-20796.9", 0x0800002, 0x400000, CRC(870139cb) SHA1(24fda2cd458cf7a3db485564c02ac61d30cbdf5e) ) /* Located at position 10 on 2C-CRX rom board */ + ROM_LOAD32_WORD("mpr-20793.6", 0x1000000, 0x400000, CRC(42ea08f8) SHA1(e70b55709067628ea0bf3f5190a300100b61eed1) ) /* Located at position 7 on 2C-CRX rom board */ + ROM_LOAD32_WORD("mpr-20794.7", 0x1000002, 0x400000, CRC(8e5cd1db) SHA1(d90e86d38bda12f2d0f99e23a42928f05bde3ea8) ) /* Located at position 8 on 2C-CRX rom board */ + ROM_LOAD32_WORD("mpr-20791.4", 0x1800000, 0x400000, CRC(4883d0df) SHA1(b98af63e81f6c1b2766d7e96acbd1821bba000d4) ) /* Located at position 5 on 2C-CRX rom board */ + ROM_LOAD32_WORD("mpr-20792.5", 0x1800002, 0x400000, CRC(47becfa2) SHA1(a333885872a64b322f3cb464a70352d73654b1b3) ) /* Located at position 6 on 2C-CRX rom board */ + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // TGPx4 program (COPRO sockets) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-20799.16", 0x0000000, 0x400000, CRC(424571bf) SHA1(18a4e8d0e968fff3b645b59a0023b0ef38d51924) ) /* Located at position 17 on 2C-CRX rom board */ + ROM_LOAD32_WORD("mpr-20803.20", 0x0000002, 0x400000, CRC(61a8ad52) SHA1(0215b5de6d10f0852ac0ca4e10475e10243e39c7) ) /* Located at position 21 on 2C-CRX rom board */ + ROM_LOAD32_WORD("mpr-20800.17", 0x0800000, 0x400000, CRC(3c2ee808) SHA1(dc0c470c6b410ab991ef0e09ce1cc0f63c8a204d) ) /* Located at position 18 on 2C-CRX rom board */ + ROM_LOAD32_WORD("mpr-20804.21", 0x0800002, 0x400000, CRC(03b35cb8) SHA1(7bd2ae89f9cc7c0570dbaffe5f54aea2dfa1b39e) ) /* Located at position 22 on 2C-CRX rom board */ + ROM_LOAD32_WORD("mpr-20801.18", 0x1000000, 0x400000, CRC(c6914173) SHA1(d0861366c4123c833a325df5345f951386a94d1a) ) /* Located at position 19 on 2C-CRX rom board */ + ROM_LOAD32_WORD("mpr-20805.22", 0x1000002, 0x400000, CRC(f6605ede) SHA1(7c95bfe2e95bae3d59c3c9efe1f40b5bc292ad44) ) /* Located at position 23 on 2C-CRX rom board */ + ROM_LOAD32_WORD("mpr-20802.19", 0x1800000, 0x400000, CRC(d11b5267) SHA1(b90909849fbe0f62d5ec7c38608c84e7fa845ebf) ) /* Located at position 20 on 2C-CRX rom board */ + ROM_LOAD32_WORD("mpr-20806.23", 0x1800002, 0x400000, CRC(0c942073) SHA1(5f32a56857e2213b110c32deea184dba882e34b8) ) /* Located at position 24 on 2C-CRX rom board */ + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-20809.25", 0x0000000, 0x400000, CRC(3b7b4622) SHA1(c6f1a1fd2684f352d3846b7f859b0405fa2d667a) ) /* Located at position 27 on 2C-CRX rom board */ + ROM_LOAD32_WORD("mpr-20807.24", 0x0000002, 0x400000, CRC(1241e0f2) SHA1(3f7fa1d7d3d398bc8d5295bc1df6fe11405d20d9) ) /* Located at position 25 on 2C-CRX rom board */ + ROM_LOAD32_WORD("mpr-20810.27", 0x0800000, 0x400000, CRC(838a10a7) SHA1(a658f1864829058b1d419e7c001e47cd0ab06a20) ) /* Located at position 28 on 2C-CRX rom board */ + ROM_LOAD32_WORD("mpr-20808.26", 0x0800002, 0x400000, CRC(706bd495) SHA1(f857b303afda6301b19d97dfe5c313126261716e) ) /* Located at position 26 on 2C-CRX rom board */ + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-20811.30", 0x000000, 0x080000, CRC(a154b83e) SHA1(2640c6b6966f4a888329e583b6b713bd0e779b6b) ) /* Located at position 31 on 2C-CRX rom board */ + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-20812.31", 0x000000, 0x200000, CRC(695b6088) SHA1(09682d18144e60d740a9d7a3e19db6f76fa581f1) ) /* Located at position 32 on 2C-CRX rom board */ + ROM_LOAD16_WORD_SWAP("mpr-20813.32", 0x200000, 0x200000, CRC(1908679c) SHA1(32913385f09da2e43af0c4a4612b955527bfe759) ) /* Located at position 33 on 2C-CRX rom board */ + ROM_LOAD16_WORD_SWAP("mpr-20814.36", 0x400000, 0x200000, CRC(e8ebc74c) SHA1(731ce721bb9e148f3a9f7fbe569522567a681c4e) ) /* Located at position 34 on 2C-CRX rom board */ + ROM_LOAD16_WORD_SWAP("mpr-20815.37", 0x600000, 0x200000, CRC(1b5aaae4) SHA1(32b4bf6c096fdccdd5d8f1ddb6c27d3389a52234) ) /* Located at position 35 on 2C-CRX rom board */ + + // 1998 317-0236-COM Model 2 + ROM_PARAMETER( ":315_5881:key", "2c2a4a93" ) +ROM_END + +ROM_START( schamp ) /* Sonic Championship, Model 2B - Sega ROM board ID# 834-12786 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19141.15", 0x000000, 0x080000, CRC(b942ef21) SHA1(2372412d49349894c99d545313c12413c2d1ec86) ) /* Default country is USA, game title is "Sonic Championship" when region */ + ROM_LOAD32_WORD("epr-19142.16", 0x000002, 0x080000, CRC(2d54bd76) SHA1(9456fb9a847e01548fc30d36ef161325788653d5) ) /* is USA or Export; "Sonic the Fighters" when set to Japan */ + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19007.11", 0x0000000, 0x400000, CRC(8b8ff751) SHA1(5343a9a2502052e3587424c984bd48caa7564849) ) + ROM_LOAD32_WORD("mpr-19008.12", 0x0000002, 0x400000, CRC(a94654f5) SHA1(39ad2e9431543ea6cbc0307bc39933cf64956a74) ) + ROM_LOAD32_WORD("mpr-19005.9", 0x0800000, 0x400000, CRC(98cd1127) SHA1(300c9cdef199f31255bacb95399e9c75be73f817) ) + ROM_LOAD32_WORD("mpr-19006.10", 0x0800002, 0x400000, CRC(e79f0a26) SHA1(37a4ff13cfccfda587ca59a9ef08b5914d2c28d4) ) + ROM_LOAD32_WORD("epr-19143.7", 0x1000000, 0x080000, CRC(f97176fd) SHA1(8c9d871d4639563f8298a7f93032e07a8f863faa) ) + ROM_LOAD32_WORD("epr-19144.8", 0x1000002, 0x080000, CRC(d040202a) SHA1(950ad9174196e776881439545983f91655922a49) ) + ROM_COPY( "main_data", 0x1000000, 0x1100000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1200000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1300000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1400000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1500000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1600000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1700000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1800000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1900000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1a00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1b00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1c00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1d00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1e00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1f00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) + ROM_LOAD32_WORD("mpr-19015.29", 0x000000, 0x200000, CRC(c74d99e3) SHA1(9914be9925b86af6af670745b5eba3a9e4f24af9) ) + ROM_LOAD32_WORD("mpr-19016.30", 0x000002, 0x200000, CRC(746ae931) SHA1(a6f0f589ad174a34493ee24dc0cb509ead3aed70) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19009.17", 0x000000, 0x400000, CRC(fd410350) SHA1(5af3a90c87ec8a90a8fc58ae469ef23ec6e6213c) ) + ROM_LOAD32_WORD("mpr-19012.21", 0x000002, 0x400000, CRC(9bb7b5b6) SHA1(8e13a0bb34e187a340b38d76ab15ff6fe4bae764) ) + ROM_LOAD32_WORD("mpr-19010.18", 0x800000, 0x400000, CRC(6fd94187) SHA1(e3318ef0eb0168998e139e527339c7c667c17fb1) ) + ROM_LOAD32_WORD("mpr-19013.22", 0x800002, 0x400000, CRC(9e232fe5) SHA1(a6c4b2b3bf8efc6f6263f73d6f4cacf9785010c1) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19019.27", 0x000000, 0x400000, CRC(59121896) SHA1(c29bedb41b14d63c6067ae12ad009deaafca2aa4) ) + ROM_LOAD32_WORD("mpr-19017.25", 0x000002, 0x400000, CRC(7b298379) SHA1(52fad61412040c90c7dd300c0fd7aa5b8d5af441) ) + ROM_LOAD32_WORD("mpr-19020.28", 0x800000, 0x400000, CRC(9540dba0) SHA1(7b9a75caa8c5b12ba54c6f4f746d80b165ee97ab) ) + ROM_LOAD32_WORD("mpr-19018.26", 0x800002, 0x400000, CRC(3b7e7a12) SHA1(9c707a7c2cffc5eff19f9919ddfae7300842fd19) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-19021.31", 0x000000, 0x080000, CRC(0b9f7583) SHA1(21290389cd8bd9e52ed438152cc6cb5793f809d3) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19022.32", 0x000000, 0x200000, CRC(4381869b) SHA1(43a21609b49926a227558d4938088526acf1fe42) ) + ROM_LOAD16_WORD_SWAP("mpr-19023.33", 0x200000, 0x200000, CRC(07c67f88) SHA1(696dc85e066fb27c7618e52e0acd0d00451e4589) ) + ROM_LOAD16_WORD_SWAP("mpr-19024.34", 0x400000, 0x200000, CRC(15ff76d3) SHA1(b431bd85c973aa0a4d6032ac98fb057139f142a2) ) + ROM_LOAD16_WORD_SWAP("mpr-19025.35", 0x600000, 0x200000, CRC(6ad8fb70) SHA1(b666d31f9be26eb0cdcb71041a3c3c08d5aa41e1) ) +ROM_END + +ROM_START( sfight ) /* Sonic The Fighters, Model 2B */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19001.15", 0x000000, 0x080000, CRC(9b088511) SHA1(20718d985d14f4d2b1b8e982bfbebddd73cdb972) ) /* Default country is Japan, the game title is "Sonic the Fighters" */ + ROM_LOAD32_WORD("epr-19002.16", 0x000002, 0x080000, CRC(46f510da) SHA1(edcbf61122db568ccaa4c3106f507087c1740c9b) ) /* in all regions */ + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19007.11", 0x0000000, 0x400000, CRC(8b8ff751) SHA1(5343a9a2502052e3587424c984bd48caa7564849) ) + ROM_LOAD32_WORD("mpr-19008.12", 0x0000002, 0x400000, CRC(a94654f5) SHA1(39ad2e9431543ea6cbc0307bc39933cf64956a74) ) + ROM_LOAD32_WORD("mpr-19005.9", 0x0800000, 0x400000, CRC(98cd1127) SHA1(300c9cdef199f31255bacb95399e9c75be73f817) ) + ROM_LOAD32_WORD("mpr-19006.10", 0x0800002, 0x400000, CRC(e79f0a26) SHA1(37a4ff13cfccfda587ca59a9ef08b5914d2c28d4) ) + ROM_LOAD32_WORD("epr-19003.7", 0x1000000, 0x080000, CRC(63bae5c5) SHA1(cbd55b7b7376ac2f67befaf4c43eef3727ba7b7f) ) + ROM_LOAD32_WORD("epr-19004.8", 0x1000002, 0x080000, CRC(c10c9f39) SHA1(cf806501dbfa48d16cb7ed5f39a6146f734ba455) ) + ROM_COPY( "main_data", 0x1000000, 0x1100000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1200000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1300000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1400000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1500000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1600000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1700000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1800000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1900000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1a00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1b00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1c00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1d00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1e00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1f00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) + ROM_LOAD32_WORD("mpr-19015.29", 0x000000, 0x200000, CRC(c74d99e3) SHA1(9914be9925b86af6af670745b5eba3a9e4f24af9) ) + ROM_LOAD32_WORD("mpr-19016.30", 0x000002, 0x200000, CRC(746ae931) SHA1(a6f0f589ad174a34493ee24dc0cb509ead3aed70) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19009.17", 0x000000, 0x400000, CRC(fd410350) SHA1(5af3a90c87ec8a90a8fc58ae469ef23ec6e6213c) ) + ROM_LOAD32_WORD("mpr-19012.21", 0x000002, 0x400000, CRC(9bb7b5b6) SHA1(8e13a0bb34e187a340b38d76ab15ff6fe4bae764) ) + ROM_LOAD32_WORD("mpr-19010.18", 0x800000, 0x400000, CRC(6fd94187) SHA1(e3318ef0eb0168998e139e527339c7c667c17fb1) ) + ROM_LOAD32_WORD("mpr-19013.22", 0x800002, 0x400000, CRC(9e232fe5) SHA1(a6c4b2b3bf8efc6f6263f73d6f4cacf9785010c1) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19019.27", 0x000000, 0x400000, CRC(59121896) SHA1(c29bedb41b14d63c6067ae12ad009deaafca2aa4) ) + ROM_LOAD32_WORD("mpr-19017.25", 0x000002, 0x400000, CRC(7b298379) SHA1(52fad61412040c90c7dd300c0fd7aa5b8d5af441) ) + ROM_LOAD32_WORD("mpr-19020.28", 0x800000, 0x400000, CRC(9540dba0) SHA1(7b9a75caa8c5b12ba54c6f4f746d80b165ee97ab) ) + ROM_LOAD32_WORD("mpr-19018.26", 0x800002, 0x400000, CRC(3b7e7a12) SHA1(9c707a7c2cffc5eff19f9919ddfae7300842fd19) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-19021.31", 0x000000, 0x080000, CRC(0b9f7583) SHA1(21290389cd8bd9e52ed438152cc6cb5793f809d3) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19022.32", 0x000000, 0x200000, CRC(4381869b) SHA1(43a21609b49926a227558d4938088526acf1fe42) ) + ROM_LOAD16_WORD_SWAP("mpr-19023.33", 0x200000, 0x200000, CRC(07c67f88) SHA1(696dc85e066fb27c7618e52e0acd0d00451e4589) ) + ROM_LOAD16_WORD_SWAP("mpr-19024.34", 0x400000, 0x200000, CRC(15ff76d3) SHA1(b431bd85c973aa0a4d6032ac98fb057139f142a2) ) + ROM_LOAD16_WORD_SWAP("mpr-19025.35", 0x600000, 0x200000, CRC(6ad8fb70) SHA1(b666d31f9be26eb0cdcb71041a3c3c08d5aa41e1) ) +ROM_END + +ROM_START( stcc ) /* Sega Touring Car Championship, Model 2C - Defaults to Japan, Twin & Default View set to Bird's */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19570.15", 0x000000, 0x080000, CRC(9d6a1965) SHA1(6f1e75d86a37b8579f968b2fb51d32a1a860697f) ) /* Higher rom numbers indicate a newer version */ + ROM_LOAD32_WORD("epr-19571.16", 0x000002, 0x080000, CRC(97254d16) SHA1(f9154cd9e954b16f7f45019b4758b1f971190437) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19257.11", 0x000000, 0x400000, CRC(ac28ee24) SHA1(31d360dc435336942f70365d0491a2ccfc24c4c0) ) + ROM_LOAD32_WORD("mpr-19258.12", 0x000002, 0x400000, CRC(f5ba7d78) SHA1(9c8304a1f856d1ded869ed2b86de52129510f019) ) + ROM_LOAD32_WORD("epr-19270.9", 0x800000, 0x080000, CRC(7bd1d04e) SHA1(0490f3abc97af16e05f0dc9623e8fc635b1d4262) ) + ROM_LOAD32_WORD("epr-19271.10", 0x800002, 0x080000, CRC(d2d74f85) SHA1(49e7a1e6478122b4f0e679d7b336fb34044b503b) ) + ROM_COPY("main_data", 0x800000, 0x900000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xa00000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xb00000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xc00000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xd00000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xe00000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xf00000, 0x100000) + + ROM_REGION( 0x800000, "copro_data", 0 ) // TGPx4 program + ROM_LOAD32_WORD("mpr-19255.29", 0x000000, 0x200000, CRC(d78bf030) SHA1(e6b3d8422613d22db50cf6c251f9a21356d96653) ) + ROM_LOAD32_WORD("mpr-19256.30", 0x000002, 0x200000, CRC(cb2b2d9e) SHA1(86b2b8bb6074352f72eb81e616093a1ba6f5163f) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19251.17", 0x000000, 0x400000, CRC(e06ff7ba) SHA1(6d472d03cd3caeb66be929c74ae63c32d305a3db) ) + ROM_LOAD32_WORD("mpr-19252.21", 0x000002, 0x400000, CRC(68509993) SHA1(654d5cdf44e7e1e788b26593f418ce76a5c1165a) ) + ROM_LOAD32_WORD("epr-19266.18", 0x800000, 0x080000, CRC(41464ee2) SHA1(afbbc0328bd36c34c69f0f54404dfd6a64036417) ) + ROM_LOAD32_WORD("epr-19267.22", 0x800002, 0x080000, CRC(780f994d) SHA1(f134482ed0fcfc7b3eea39947da47081301a111a) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19254.27", 0x000000, 0x200000, CRC(1ec49c02) SHA1(a9bdbab7b4b265c9118cf27fd45ca94f4516d5c6) ) + ROM_LOAD32_WORD("mpr-19253.25", 0x000002, 0x200000, CRC(41ba79fb) SHA1(f4d8a4f8278eec6d528bd947b91ebeb5223559d5) ) + ROM_COPY( "textures", 0x000000, 0x400000, 0x400000 ) + ROM_LOAD32_WORD("epr-19269.28", 0x800000, 0x080000, CRC(01881121) SHA1(fe711709e70b3743b2a0318b823d859f233d3ff8) ) + ROM_LOAD32_WORD("epr-19268.26", 0x800002, 0x080000, CRC(bc4e081c) SHA1(b89d39ed19a146d1e94e52682f67d2cd23d8df7f) ) + ROM_COPY( "textures", 0x800000, 0x900000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xa00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xb00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xc00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xd00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xe00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xf00000, 0x100000 ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-19274.31", 0x000000, 0x020000, CRC(2dcc08ae) SHA1(bad26e2c994f2d4db5d9be0e34cf21a8bf5aa7e9) ) + + ROM_REGION( 0x20000, "mpegcpu", 0) // Z80 DSB program + ROM_LOAD("epr-19275.2s", 0x000000, 0x20000, CRC(ee809d3f) SHA1(347080858fbfe9955002f382603a1b86a52d26d5) ) + + ROM_REGION( 0x20000, "cpu4", 0) // Communication program + ROM_LOAD16_WORD_SWAP("epr-18643a.7", 0x000000, 0x20000, CRC(b5e048ec) SHA1(8182e05a2ffebd590a936c1359c81e60caa79c2a) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19259.32", 0x000000, 0x400000, CRC(4d55dbfc) SHA1(6e57e6e6e785b0f14bb5e221a44d518dbde7ad65) ) + ROM_LOAD16_WORD_SWAP("mpr-19261.34", 0x400000, 0x400000, CRC(b88878ff) SHA1(4bebcfba68b0cc2fa0bcacfaaf2d2e8af3625c5d) ) + + ROM_REGION( 0x800000, "mpeg", 0 ) // MPEG audio data + ROM_LOAD("mpr-19262.57s", 0x000000, 0x200000, CRC(922aed7a) SHA1(8d6872bdd46eaf2076c10d18c10af8ccbd3b10e8) ) + ROM_LOAD("mpr-19263.58s", 0x200000, 0x200000, CRC(a256f4cd) SHA1(a17b49050f1ecf1970477b12201cc3b58b31d89c) ) + ROM_LOAD("mpr-19264.59s", 0x400000, 0x200000, CRC(b6c51d0f) SHA1(9e0969a1e49ec1462f69cd0f0f9ce630d66174ce) ) + ROM_LOAD("mpr-19265.60s", 0x600000, 0x200000, CRC(7d98700a) SHA1(bedd37314ecab424b5b27030e1e7dc1b596303f3) ) + + ROM_REGION( 0x10000, "drive", 0 ) // drive board CPU (code is Z80 compatible) + ROM_LOAD( "epr-18261.ic9", 0x000000, 0x010000, CRC(0c7fac58) SHA1(68c1724c41401e28a5123022981c8919fd22656e) ) +ROM_END + +ROM_START( stccb ) /* Sega Touring Car Championship Revision B, Model 2C - Defaults to Japan, Twin & Default View set to Driver's - Sega Game ID# 833-12779, Sega ROM board ID# 834-12780 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19272b.15", 0x000000, 0x080000, CRC(efdfb625) SHA1(5026e28b9d8267492bd0d9746d64526540a001da) ) + ROM_LOAD32_WORD("epr-19273b.16", 0x000002, 0x080000, CRC(61a357d9) SHA1(3f22f13a3baa46f93cb40e8af9534afaa57ead9c) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19257.11", 0x000000, 0x400000, CRC(ac28ee24) SHA1(31d360dc435336942f70365d0491a2ccfc24c4c0) ) + ROM_LOAD32_WORD("mpr-19258.12", 0x000002, 0x400000, CRC(f5ba7d78) SHA1(9c8304a1f856d1ded869ed2b86de52129510f019) ) + ROM_LOAD32_WORD("epr-19270.9", 0x800000, 0x080000, CRC(7bd1d04e) SHA1(0490f3abc97af16e05f0dc9623e8fc635b1d4262) ) + ROM_LOAD32_WORD("epr-19271.10", 0x800002, 0x080000, CRC(d2d74f85) SHA1(49e7a1e6478122b4f0e679d7b336fb34044b503b) ) + ROM_COPY("main_data", 0x800000, 0x900000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xa00000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xb00000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xc00000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xd00000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xe00000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xf00000, 0x100000) + + ROM_REGION( 0x800000, "copro_data", 0 ) // TGPx4 program + ROM_LOAD32_WORD("mpr-19255.29", 0x000000, 0x200000, CRC(d78bf030) SHA1(e6b3d8422613d22db50cf6c251f9a21356d96653) ) + ROM_LOAD32_WORD("mpr-19256.30", 0x000002, 0x200000, CRC(cb2b2d9e) SHA1(86b2b8bb6074352f72eb81e616093a1ba6f5163f) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19251.17", 0x000000, 0x400000, CRC(e06ff7ba) SHA1(6d472d03cd3caeb66be929c74ae63c32d305a3db) ) + ROM_LOAD32_WORD("mpr-19252.21", 0x000002, 0x400000, CRC(68509993) SHA1(654d5cdf44e7e1e788b26593f418ce76a5c1165a) ) + ROM_LOAD32_WORD("epr-19266.18", 0x800000, 0x080000, CRC(41464ee2) SHA1(afbbc0328bd36c34c69f0f54404dfd6a64036417) ) + ROM_LOAD32_WORD("epr-19267.22", 0x800002, 0x080000, CRC(780f994d) SHA1(f134482ed0fcfc7b3eea39947da47081301a111a) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19254.27", 0x000000, 0x200000, CRC(1ec49c02) SHA1(a9bdbab7b4b265c9118cf27fd45ca94f4516d5c6) ) + ROM_LOAD32_WORD("mpr-19253.25", 0x000002, 0x200000, CRC(41ba79fb) SHA1(f4d8a4f8278eec6d528bd947b91ebeb5223559d5) ) + ROM_COPY( "textures", 0x000000, 0x400000, 0x400000 ) + ROM_LOAD32_WORD("epr-19269.28", 0x800000, 0x080000, CRC(01881121) SHA1(fe711709e70b3743b2a0318b823d859f233d3ff8) ) + ROM_LOAD32_WORD("epr-19268.26", 0x800002, 0x080000, CRC(bc4e081c) SHA1(b89d39ed19a146d1e94e52682f67d2cd23d8df7f) ) + ROM_COPY( "textures", 0x800000, 0x900000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xa00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xb00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xc00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xd00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xe00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xf00000, 0x100000 ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-19274.31", 0x000000, 0x020000, CRC(2dcc08ae) SHA1(bad26e2c994f2d4db5d9be0e34cf21a8bf5aa7e9) ) + + ROM_REGION( 0x20000, "mpegcpu", 0) // Z80 DSB program + ROM_LOAD("epr-19275.2s", 0x000000, 0x20000, CRC(ee809d3f) SHA1(347080858fbfe9955002f382603a1b86a52d26d5) ) + + ROM_REGION( 0x20000, "cpu4", 0) // Communication program + ROM_LOAD16_WORD_SWAP("epr-18643a.7", 0x000000, 0x20000, CRC(b5e048ec) SHA1(8182e05a2ffebd590a936c1359c81e60caa79c2a) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19259.32", 0x000000, 0x400000, CRC(4d55dbfc) SHA1(6e57e6e6e785b0f14bb5e221a44d518dbde7ad65) ) + ROM_LOAD16_WORD_SWAP("mpr-19261.34", 0x400000, 0x400000, CRC(b88878ff) SHA1(4bebcfba68b0cc2fa0bcacfaaf2d2e8af3625c5d) ) + + ROM_REGION( 0x800000, "mpeg", 0 ) // MPEG audio data + ROM_LOAD("mpr-19262.57s", 0x000000, 0x200000, CRC(922aed7a) SHA1(8d6872bdd46eaf2076c10d18c10af8ccbd3b10e8) ) + ROM_LOAD("mpr-19263.58s", 0x200000, 0x200000, CRC(a256f4cd) SHA1(a17b49050f1ecf1970477b12201cc3b58b31d89c) ) + ROM_LOAD("mpr-19264.59s", 0x400000, 0x200000, CRC(b6c51d0f) SHA1(9e0969a1e49ec1462f69cd0f0f9ce630d66174ce) ) + ROM_LOAD("mpr-19265.60s", 0x600000, 0x200000, CRC(7d98700a) SHA1(bedd37314ecab424b5b27030e1e7dc1b596303f3) ) + + ROM_REGION( 0x10000, "drive", 0 ) // drive board CPU (code is Z80 compatible) + ROM_LOAD( "epr-18261.ic9", 0x000000, 0x010000, CRC(0c7fac58) SHA1(68c1724c41401e28a5123022981c8919fd22656e) ) +ROM_END + +ROM_START( stcca ) /* Sega Touring Car Championship Revision A, Model 2C - Defaults to Japan, Twin & no "Default View" option - Sega Game ID# 833-12779, Sega ROM board ID# 834-12780 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19272a.15", 0x000000, 0x080000, CRC(20cedd05) SHA1(e465967c784de18caaaac77e164796e9779f576a) ) + ROM_LOAD32_WORD("epr-19273a.16", 0x000002, 0x080000, CRC(1b0ab4d6) SHA1(142bcd53fa6632fcc866bbda817aa83470111ef1) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19257.11", 0x000000, 0x400000, CRC(ac28ee24) SHA1(31d360dc435336942f70365d0491a2ccfc24c4c0) ) + ROM_LOAD32_WORD("mpr-19258.12", 0x000002, 0x400000, CRC(f5ba7d78) SHA1(9c8304a1f856d1ded869ed2b86de52129510f019) ) + ROM_LOAD32_WORD("epr-19270.9", 0x800000, 0x080000, CRC(7bd1d04e) SHA1(0490f3abc97af16e05f0dc9623e8fc635b1d4262) ) + ROM_LOAD32_WORD("epr-19271.10", 0x800002, 0x080000, CRC(d2d74f85) SHA1(49e7a1e6478122b4f0e679d7b336fb34044b503b) ) + ROM_COPY("main_data", 0x800000, 0x900000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xa00000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xb00000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xc00000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xd00000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xe00000, 0x100000) + ROM_COPY("main_data", 0x800000, 0xf00000, 0x100000) + + ROM_REGION( 0x800000, "copro_data", 0 ) // TGPx4 program + ROM_LOAD32_WORD("mpr-19255.29", 0x000000, 0x200000, CRC(d78bf030) SHA1(e6b3d8422613d22db50cf6c251f9a21356d96653) ) + ROM_LOAD32_WORD("mpr-19256.30", 0x000002, 0x200000, CRC(cb2b2d9e) SHA1(86b2b8bb6074352f72eb81e616093a1ba6f5163f) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19251.17", 0x000000, 0x400000, CRC(e06ff7ba) SHA1(6d472d03cd3caeb66be929c74ae63c32d305a3db) ) + ROM_LOAD32_WORD("mpr-19252.21", 0x000002, 0x400000, CRC(68509993) SHA1(654d5cdf44e7e1e788b26593f418ce76a5c1165a) ) + ROM_LOAD32_WORD("epr-19266.18", 0x800000, 0x080000, CRC(41464ee2) SHA1(afbbc0328bd36c34c69f0f54404dfd6a64036417) ) + ROM_LOAD32_WORD("epr-19267.22", 0x800002, 0x080000, CRC(780f994d) SHA1(f134482ed0fcfc7b3eea39947da47081301a111a) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19254.27", 0x000000, 0x200000, CRC(1ec49c02) SHA1(a9bdbab7b4b265c9118cf27fd45ca94f4516d5c6) ) + ROM_LOAD32_WORD("mpr-19253.25", 0x000002, 0x200000, CRC(41ba79fb) SHA1(f4d8a4f8278eec6d528bd947b91ebeb5223559d5) ) + ROM_COPY( "textures", 0x000000, 0x400000, 0x400000 ) + ROM_LOAD32_WORD("epr-19269.28", 0x800000, 0x080000, CRC(01881121) SHA1(fe711709e70b3743b2a0318b823d859f233d3ff8) ) + ROM_LOAD32_WORD("epr-19268.26", 0x800002, 0x080000, CRC(bc4e081c) SHA1(b89d39ed19a146d1e94e52682f67d2cd23d8df7f) ) + ROM_COPY( "textures", 0x800000, 0x900000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xa00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xb00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xc00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xd00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xe00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xf00000, 0x100000 ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-19274.31", 0x000000, 0x020000, CRC(2dcc08ae) SHA1(bad26e2c994f2d4db5d9be0e34cf21a8bf5aa7e9) ) + + ROM_REGION( 0x20000, "mpegcpu", 0) // Z80 DSB program + ROM_LOAD("epr-19275.2s", 0x000000, 0x20000, CRC(ee809d3f) SHA1(347080858fbfe9955002f382603a1b86a52d26d5) ) + + ROM_REGION( 0x20000, "cpu4", 0) // Communication program + ROM_LOAD16_WORD_SWAP("epr-18643a.7", 0x000000, 0x20000, CRC(b5e048ec) SHA1(8182e05a2ffebd590a936c1359c81e60caa79c2a) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19259.32", 0x000000, 0x400000, CRC(4d55dbfc) SHA1(6e57e6e6e785b0f14bb5e221a44d518dbde7ad65) ) + ROM_LOAD16_WORD_SWAP("mpr-19261.34", 0x400000, 0x400000, CRC(b88878ff) SHA1(4bebcfba68b0cc2fa0bcacfaaf2d2e8af3625c5d) ) + + ROM_REGION( 0x800000, "mpeg", 0 ) // MPEG audio data + ROM_LOAD("mpr-19262.57s", 0x000000, 0x200000, CRC(922aed7a) SHA1(8d6872bdd46eaf2076c10d18c10af8ccbd3b10e8) ) + ROM_LOAD("mpr-19263.58s", 0x200000, 0x200000, CRC(a256f4cd) SHA1(a17b49050f1ecf1970477b12201cc3b58b31d89c) ) + ROM_LOAD("mpr-19264.59s", 0x400000, 0x200000, CRC(b6c51d0f) SHA1(9e0969a1e49ec1462f69cd0f0f9ce630d66174ce) ) + ROM_LOAD("mpr-19265.60s", 0x600000, 0x200000, CRC(7d98700a) SHA1(bedd37314ecab424b5b27030e1e7dc1b596303f3) ) + + ROM_REGION( 0x10000, "drive", 0 ) // drive board CPU (code is Z80 compatible) + ROM_LOAD( "epr-18261.ic9", 0x000000, 0x010000, CRC(0c7fac58) SHA1(68c1724c41401e28a5123022981c8919fd22656e) ) +ROM_END + +ROM_START( skisuprg ) /* Sega Ski Super G, Model 2C, Sega Game ID# 833-12861, ROM board ID# 834-12862 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-19489.15", 0x000000, 0x080000, CRC(1df948a7) SHA1(a38faeb97c65b379ad05f7311b55217118c8d2be) ) + ROM_LOAD32_WORD( "epr-19490.16", 0x000002, 0x080000, CRC(e6fc24d3) SHA1(1ac9172cf0b4d6a3488483ffa490a4ca5d410927) ) + ROM_LOAD32_WORD( "epr-19551.13", 0x100000, 0x080000, CRC(3ee8f0d5) SHA1(23f45858559776a70b3b57f4cb2840f44e6a6531) ) + ROM_LOAD32_WORD( "epr-19552.14", 0x100002, 0x080000, CRC(baa2e49a) SHA1(b234f3b65e8fabfb6ec7ca62dd9a1d2935b2e95a) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-19494.11", 0x000000, 0x400000, CRC(f19cdb5c) SHA1(bdbb7d9e91a7742ff5a908b6244adbed291e5e7f) ) + ROM_LOAD32_WORD( "mpr-19495.12", 0x000002, 0x400000, CRC(d42e5ef2) SHA1(21ca5e7e543595a4691aacdbcdd2af21d464d939) ) + ROM_LOAD32_WORD( "mpr-19492.9", 0x800000, 0x400000, CRC(4805318f) SHA1(dbd1359817933313c6d74d3a1450682e8ce5857a) ) + ROM_LOAD32_WORD( "mpr-19493.10", 0x800002, 0x400000, CRC(39daa909) SHA1(e29e50c7fc39bd4945f993ceaa100358054efc5a) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // TGPx4 program + ROM_LOAD32_WORD( "mpr-19502.29", 0x000000, 0x400000, CRC(2212d8d6) SHA1(3b8a4da2dc00a1eac41b48cbdc322ea1c31b8b29) ) + ROM_LOAD32_WORD( "mpr-19503.30", 0x000002, 0x400000, CRC(3c9cfc73) SHA1(2213485a00cef0bcef11b67f00027c4159c5e2f5) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-19496.17", 0x000000, 0x400000, CRC(0e9aef4e) SHA1(d4b511b90c0a6e27d6097cb25ff005f68d5fa83c) ) + ROM_LOAD32_WORD( "mpr-19497.21", 0x000002, 0x400000, CRC(5397efe9) SHA1(4b20bab36462f9506fa2601c2545051ca49de7f5) ) + ROM_LOAD32_WORD( "mpr-19498.18", 0x800000, 0x400000, CRC(32e5ae60) SHA1(b8a1cc117875c3919a78eedb60a06926288d9b95) ) + ROM_LOAD32_WORD( "mpr-19499.22", 0x800002, 0x400000, CRC(2b9f5b48) SHA1(40f3f2844244c3f1c8792aa262872243ad20fd69) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD( "mpr-19501.27", 0x000000, 0x400000, CRC(66d7b02e) SHA1(cede0dc5c8d9fbfa8de01fe864b3cc101abf67d7) ) + ROM_LOAD32_WORD( "mpr-19500.25", 0x000002, 0x400000, CRC(905f5798) SHA1(31f104e3022b5bc7ed7c667eb801a57949a06c93) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-19491.31", 0x000000, 0x080000, CRC(1c9b15fd) SHA1(045244a4eebc45f149aecf47f090cede1813477b) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-19504.32", 0x000000, 0x400000, CRC(9419ec08) SHA1(d05d9ceb7fd09fa8991c0df4d1c57eb621460e30) ) + ROM_LOAD16_WORD_SWAP( "mpr-19505.34", 0x400000, 0x400000, CRC(eba7f41d) SHA1(f6e521bedf298808a768f6fdcb0b60b320a66d04) ) +ROM_END + +/* Sega Water Ski - There should be a version with program roms EPR-19965 & EPR-19966 (currently undumped) */ +ROM_START( segawski ) /* Sega Water Ski Revision A, Model 2C, Sega Game ID# 833-13204, ROM board ID# 834-13205 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19963a.15", 0x000000, 0x080000, CRC(89c9cb0d) SHA1(7f1f600222447effb28cf2d56193ea9f45fd0646) ) + ROM_LOAD32_WORD("epr-19964a.16", 0x000002, 0x080000, CRC(c382cefe) SHA1(c0ccee4eb19d9626dee0f77f08060f1d9708b39d) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19980.11", 0x0000000, 0x400000, CRC(709804f2) SHA1(6633eeb2bc0ddd5eb5994cb7cc39ed4ab2094a7e) ) + ROM_LOAD32_WORD("mpr-19981.12", 0x0000002, 0x400000, CRC(a1e8ec09) SHA1(53abaf71e85f874d28a79c8775b1f0ac919fbe22) ) + ROM_LOAD32_WORD("mpr-19982.9", 0x0800000, 0x400000, CRC(41c398bb) SHA1(e6652111a494165c93d5e9dc7d1c3df46f1a8961) ) + ROM_LOAD32_WORD("mpr-19983.10", 0x0800002, 0x400000, CRC(e210dea2) SHA1(a32010648046738f64cbc7e1a074b9443bbde865) ) + ROM_LOAD32_WORD("mpr-19984.7", 0x1000000, 0x400000, CRC(14b967d1) SHA1(8e0fd13f5838218224ce162a55558b75dcda4cbf) ) + ROM_LOAD32_WORD("mpr-19985.8", 0x1000002, 0x400000, CRC(57827677) SHA1(0d764ec9e136e4d027aefb10e9f025aa2e081573) ) + ROM_LOAD32_WORD("epr-19961.5", 0x1800000, 0x080000, CRC(cc34ecaf) SHA1(8e540a429826d40acef5a34a0b6b1b89e059961b) ) + ROM_LOAD32_WORD("epr-19962.6", 0x1800002, 0x080000, CRC(e8a30e5e) SHA1(2d7290186aaca28f3aaf6656b090e1cbe509aa48) ) + ROM_COPY( "main_data", 0x1800000, 0x1900000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1a00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1b00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1c00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1d00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1e00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1f00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // TGPx4 program + ROM_LOAD32_WORD("mpr-19986.29", 0x0000000, 0x400000, CRC(4b8e26f8) SHA1(859e3788c75599295a8b57ed7852f2cbb6a2a738) ) + ROM_LOAD32_WORD("mpr-19987.30", 0x0000002, 0x400000, CRC(8d5b9d38) SHA1(35f41c474af3754152aecefe81e912120823e0ff) ) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19972.17", 0x0000000, 0x400000, CRC(493c0f8f) SHA1(c68f662d53fbcec3d2dbd9ebdfd37cbf1ff46408) ) + ROM_LOAD32_WORD("mpr-19973.21", 0x0000002, 0x400000, CRC(01b6f8e1) SHA1(be1f1017ff5f43218de2d99090e4e7db64f7a483) ) + ROM_LOAD32_WORD("mpr-19974.18", 0x0800000, 0x400000, CRC(2bd947d3) SHA1(7f16e668db5a4673cd909bdfa1b9dc665827b392) ) + ROM_LOAD32_WORD("mpr-19975.22", 0x0800002, 0x400000, CRC(07e6b699) SHA1(35bbea4cd42ab39f976cd2ec964c32d5d3982c4a) ) + ROM_LOAD32_WORD("mpr-19976.19", 0x1000000, 0x400000, CRC(f9496566) SHA1(e6dee764301c0ed34e5134a5232898bb42563c20) ) + ROM_LOAD32_WORD("mpr-19977.23", 0x1000002, 0x400000, CRC(b3dbf54b) SHA1(d61448394b7b2036e27bdbf7a062d63f076db9da) ) + ROM_LOAD32_WORD("mpr-19978.20", 0x1800000, 0x400000, CRC(c80f4ed7) SHA1(e7ea6dfb57ab1fe924a80c244b8acfe4aad2b76d) ) + ROM_LOAD32_WORD("mpr-19979.24", 0x1800002, 0x400000, CRC(1c0db4d2) SHA1(65a81f4503c6b9c26650befd183db821545c53e2) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19969.27", 0x0000000, 0x400000, CRC(c0c33d39) SHA1(f61a6266556d5687cd03031065baa2dd73112666) ) + ROM_LOAD32_WORD("mpr-19968.25", 0x0000002, 0x400000, CRC(b8d2f04f) SHA1(f0f4d2dd06cdf745ed07fe428eaa3e3ad030bff6) ) + ROM_LOAD32_WORD("mpr-19971.28", 0x0800000, 0x400000, CRC(c8708096) SHA1(c27e0a90dc1183b0cf7f32e324afa6c126f61d37) ) + ROM_LOAD32_WORD("mpr-19970.26", 0x0800002, 0x400000, CRC(c59d8d36) SHA1(24232390f0cac5ffbb17a0093a602363c686fbf8) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-19967.31", 0x000000, 0x080000, CRC(c6b8ef3f) SHA1(9f86d6e365a5535d354ff6b0614f3a19c0790d0f) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19988.32", 0x000000, 0x400000, CRC(303732fb) SHA1(63efbd9f67b38fddeeed25de660514867e03486a) ) + ROM_LOAD16_WORD_SWAP("mpr-19989.34", 0x400000, 0x400000, CRC(8074a4b3) SHA1(98dc1d122ffb9b5c52994dea2b5d8c4f004a5f8e) ) +ROM_END + +ROM_START( hotd ) /* House of the Dead, Model 2C, Sega Game ID# 610-0396-13054, ROM board ID# 834-13055 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19696.15", 0x000000, 0x080000, CRC(03da5623) SHA1(be0bd34a9216375c7204445f084f6c74c4d3b0c8) ) + ROM_LOAD32_WORD("epr-19697.16", 0x000002, 0x080000, CRC(a9722d87) SHA1(0b14f9a81272f79a5b294bc024711042c5fb2637) ) + ROM_LOAD32_WORD("epr-19694.13", 0x100000, 0x080000, CRC(e85ca1a3) SHA1(3d688be98f78fe40c2af1e91df6decd500400ae9) ) + ROM_LOAD32_WORD("epr-19695.14", 0x100002, 0x080000, CRC(cd52b461) SHA1(bc96ab2a4ba7f30c0b89814acc8931c8bf800a82) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19704.11", 0x0000000, 0x400000, CRC(aa80dbb0) SHA1(24e63f4392847f288971469cd10448536eb435d4) ) + ROM_LOAD32_WORD("mpr-19705.12", 0x0000002, 0x400000, CRC(f906843b) SHA1(bee4f43b3ad15d93a2f9f07b873c9cf5d228e2f9) ) + ROM_LOAD32_WORD("mpr-19702.9", 0x0800000, 0x400000, CRC(fc8aa3b7) SHA1(b64afb17d9c97277d8c4f20811f14f65a61cbb56) ) + ROM_LOAD32_WORD("mpr-19703.10", 0x0800002, 0x400000, CRC(208d993d) SHA1(e5c45ea5621f99661a87ffe88e24764d2bbcb51e) ) + ROM_LOAD32_WORD("mpr-19700.7", 0x1000000, 0x400000, CRC(0558cfd3) SHA1(94440839d3325176c2d03f39a78949d0ef040bba) ) + ROM_LOAD32_WORD("mpr-19701.8", 0x1000002, 0x400000, CRC(224a8929) SHA1(933770546d46abca400e7f524eff2ae89241e56d) ) + ROM_LOAD32_WORD("epr-19698.5", 0x1800000, 0x080000, CRC(e7a7b6ea) SHA1(77cb53f8730fdb55080b70910ab8c750d79acb02) ) + ROM_LOAD32_WORD("epr-19699.6", 0x1800002, 0x080000, CRC(8160b3d9) SHA1(9dab483c60624dddba8085e94a4325739592ec17) ) + ROM_COPY( "main_data", 0x1800000, 0x1900000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1a00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1b00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1c00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1d00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1e00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1f00000, 0x100000 ) + + + ROM_REGION( 0x800000, "copro_data", 0 ) // TGPx4 program + ROM_LOAD32_WORD("epr-19707.29", 0x000000, 0x080000, CRC(384fd133) SHA1(6d060378d0f801b04d12e7ee874f2fa0572992d9) ) + ROM_LOAD32_WORD("epr-19706.30", 0x000002, 0x080000, CRC(1277531c) SHA1(08d3e733ba9989fcd32290634171c73f26ab6e2b) ) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19715.17", 0x0000000, 0x400000, CRC(3ff7dda7) SHA1(0a61b091bb0bc659f0cbca8ad401d0925a1dc2ea) ) + ROM_LOAD32_WORD("mpr-19711.21", 0x0000002, 0x400000, CRC(080d13f1) SHA1(4167428a2a903aea2c14631ccf924afb81338b89) ) + ROM_LOAD32_WORD("mpr-19714.18", 0x0800000, 0x400000, CRC(3e55ab49) SHA1(70b4c1627db80e6734112c02265495e2b4a53278) ) + ROM_LOAD32_WORD("mpr-19710.22", 0x0800002, 0x400000, CRC(80df1036) SHA1(3cc59bb4910aa5382e95762f63325c06b763bd23) ) + ROM_LOAD32_WORD("mpr-19713.19", 0x1000000, 0x400000, CRC(4d092cd3) SHA1(b6d0be283c25235249186751c7f025a7c38d2f36) ) + ROM_LOAD32_WORD("mpr-19709.23", 0x1000002, 0x400000, CRC(d08937bf) SHA1(c92571e35960f27dc8b0b059f12167026d0666d1) ) + ROM_LOAD32_WORD("mpr-19712.20", 0x1800000, 0x400000, CRC(41577943) SHA1(25a0d921c8662043c5860dc7a226d4895ff9fff6) ) + ROM_LOAD32_WORD("mpr-19708.24", 0x1800002, 0x400000, CRC(5cb790f2) SHA1(d3cae450186bc62fd746b14d6a05cb397efcfe40) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19718.27", 0x0000000, 0x400000, CRC(a9de5924) SHA1(3ebac2aeb1467939337c9a5c87ad9c293560dae2) ) + ROM_LOAD32_WORD("mpr-19716.25", 0x0000002, 0x400000, CRC(45c7dcce) SHA1(f602cabd879c69afee544848feafb9fb9f5d51e2) ) + ROM_LOAD32_WORD("mpr-19719.28", 0x0800000, 0x400000, CRC(838f8343) SHA1(fe6622b5917f9a99c097fd60d9446ac6b481fa75) ) + ROM_LOAD32_WORD("mpr-19717.26", 0x0800002, 0x400000, CRC(393e440b) SHA1(927ac9cad22f87b339cc86043678470ff139ce1f) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-19720.31", 0x000000, 0x080000, CRC(b367d21d) SHA1(1edaed489a3518ddad85728e416319f940ea02bb) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19721.32", 0x000000, 0x400000, CRC(f5d8fa9a) SHA1(6836973a687c59dd80f8e6c30d33155e306be199) ) + ROM_LOAD16_WORD_SWAP("mpr-19722.34", 0x400000, 0x400000, CRC(a56fa539) SHA1(405a892bc368ba862ba71bda7525b421d6973c0e) ) +ROM_END + +ROM_START( hotdp ) + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("prg0.15", 0x000000, 0x080000, CRC(548ed10a) SHA1(393f1f96bc7efcaaa41c09ee08ce081391102583) ) + ROM_LOAD32_WORD("prg1.16", 0x000002, 0x080000, CRC(f43bb51f) SHA1(1a2a68adbfd21042fcfa20e7366f6a250e2fdf8e) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data, Flash ROM modules instead if DIP ROMs + ROM_LOAD32_WORD("dat0.11", 0x0000000, 0x400000, CRC(8d40fc82) SHA1(9ce989706795fe103fce8679f3b117cf48d9b843) ) + ROM_LOAD32_WORD("dat1.12", 0x0000002, 0x400000, CRC(63e04c15) SHA1(c62417b0b8b3a50425da0833550728eb574655fb) ) + ROM_LOAD32_WORD("dat2.9", 0x0800000, 0x400000, CRC(2aa9e4b9) SHA1(e53583cdb5eef3d31192f3ba7d21e6647e438224) ) + ROM_LOAD32_WORD("dat3.10", 0x0800002, 0x400000, CRC(356d348b) SHA1(4e43264ab5a61804f12b6f4b63c644d1250dd43d) ) + ROM_LOAD32_WORD("dat4.7", 0x1000000, 0x400000, CRC(7ec403f6) SHA1(1120616bcf8151c642183dd2e3f8636a640b624d) ) + ROM_LOAD32_WORD("dat5.8", 0x1000002, 0x400000, CRC(592fac50) SHA1(8a0386478ee8056616ea475979c515e74414a78b) ) + ROM_COPY( "main_data", 0x1800000, 0x1900000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1a00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1b00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1c00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1d00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1e00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1f00000, 0x100000 ) + + + ROM_REGION( 0x800000, "copro_data", 0 ) // TGPx4 program + ROM_LOAD32_WORD("copro0.29", 0x000000, 0x200000, CRC(fc2380f5) SHA1(02a2f8bfc3915787f3aa9645de8a0af4450cea33) ) + ROM_LOAD32_WORD("copro1.30", 0x000002, 0x200000, CRC(e6ae8f3c) SHA1(9a2c3d3b305e4707f7691d6242ff1bf47d1ced10) ) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models, Flash ROM modules instead if DIP ROMs + ROM_LOAD32_WORD("tgp0.17", 0x0000000, 0x400000, CRC(b458ec9b) SHA1(8d51443d5d0e790dc9f0060d8cedc50f177fee04) ) + ROM_LOAD32_WORD("tgp1.21", 0x0000002, 0x400000, CRC(4b250500) SHA1(425a397f8ba8e295d922c76b1145ad92cafa6b32) ) + ROM_LOAD32_WORD("tgp2.18", 0x0800000, 0x400000, CRC(17f68d25) SHA1(2f194149c456dc5195eca6426c3b1d4ee4e7fc69) ) + ROM_LOAD32_WORD("tgp3.22", 0x0800002, 0x400000, CRC(caff1d48) SHA1(033676cd1d2cf0008367d17de30675e3d4d75547) ) + ROM_LOAD32_WORD("tgp4.19", 0x1000000, 0x400000, CRC(8854f204) SHA1(54f7e23f2cc5c939000f8fd257d907cca7919b64) ) + ROM_LOAD32_WORD("tgp5.23", 0x1000002, 0x400000, CRC(29f311f3) SHA1(2f89767aaefeb2650091b37c4d505701681bb375) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures, Flash ROM modules instead if DIP ROMs + ROM_LOAD32_WORD("tex1.27", 0x0000000, 0x400000, BAD_DUMP CRC(86ef3ee4) SHA1(8ad2aa98d94e9a4f1abb61a02aba95064e533a61) ) // one of flash ROMs had broken most significant address pin, dump contains only half of even-bytes data mirrored 2x, correct sum should be 28DA + ROM_LOAD32_WORD("tex0.25", 0x0000002, 0x400000, CRC(fb10366a) SHA1(189389f84fa5f04c586953c54254f7bd09dd8d92) ) + ROM_LOAD32_WORD("tex3.28", 0x0800000, 0x400000, CRC(9a61d7e8) SHA1(d9a563f74e485df5bdf149afaed69811b5536712) ) + ROM_LOAD32_WORD("tex2.26", 0x0800002, 0x400000, CRC(84ec2923) SHA1(daea23864fbc48c14177e77cd783f73621472708) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("sndpgm0.31", 0x000000, 0x080000, CRC(30accd2e) SHA1(098f07feaa007647f86ea02ef5e1102859c5890a) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("sound1.32", 0x000000, 0x200000, CRC(e0a8dd56) SHA1(c80abe8e7541946b7dd615da98aeb04170ebf91d) ) + ROM_LOAD16_WORD_SWAP("sound2.33", 0x200000, 0x200000, CRC(a517834f) SHA1(232ec02fedf259a6112dd04e8a6b3a7a1ba17786) ) + ROM_LOAD16_WORD_SWAP("sound3.34", 0x400000, 0x200000, CRC(f0c529bb) SHA1(3c8f3843e9719079d993206feb083305aa85b0fb) ) + ROM_LOAD16_WORD_SWAP("sound4.35", 0x600000, 0x200000, CRC(3ad48d53) SHA1(b17f513705217966bc224721b444957de66d74b4) ) +ROM_END + +ROM_START( lastbrnx ) /* Last Bronx Revision A (Export), Model 2B */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19061a.15", 0x000000, 0x080000, CRC(c0aebab2) SHA1(fa63081b0aa6f02c3d197485865ee38e9c78b43d) ) + ROM_LOAD32_WORD("epr-19062a.16", 0x000002, 0x080000, CRC(cdf597e8) SHA1(a85ca36a537ba21d11ef3cfdf914c2c93ac5e68f) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19050.11", 0x000000, 0x400000, CRC(e6af2b61) SHA1(abdf7aa4c594f0916d4335c70fdd67dc6b1f4630) ) + ROM_LOAD32_WORD("mpr-19051.12", 0x000002, 0x400000, CRC(14b88961) SHA1(bec22f657c6d939c095b99ca9c6eb44b9683fd72) ) + ROM_LOAD32_WORD("mpr-19048.9", 0x800000, 0x400000, CRC(02180215) SHA1(cc5f8e61fee07aa4fc5bfe2d011088ee523c77c2) ) + ROM_LOAD32_WORD("mpr-19049.10", 0x800002, 0x400000, CRC(db7eecd6) SHA1(5955885ad2bfd69d7a2c4e1d1df907aca41fbdd0) ) + + ROM_REGION( 0x800000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19052.17", 0x000000, 0x400000, CRC(d7f27216) SHA1(b393af96522306dc2e055aea1e837979f41940d4) ) + ROM_LOAD32_WORD("mpr-19053.21", 0x000002, 0x400000, CRC(1f328465) SHA1(950a92209b7c24f66db62c31627a1f1d52721f1e) ) + + ROM_REGION( 0x800000, "textures", ROMREGION_ERASEFF ) // Textures + ROM_LOAD32_WORD("mpr-19055.27", 0x000000, 0x200000, CRC(85a57d49) SHA1(99c49fe135dc46fa861337b5bac654ae8478778a) ) + ROM_LOAD32_WORD("mpr-19054.25", 0x000002, 0x200000, CRC(05366277) SHA1(f618e2b9b26a1f7eccebfc8f8e17ef8ad9029be8) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("mpr-19056.31", 0x000000, 0x080000, CRC(22a22918) SHA1(baa039cd86650b6cd81f295916c4d256e60cb29c) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19057.32", 0x0000000, 0x400000, CRC(64809438) SHA1(aa008f83e1eff0daafe01944248ebae6054cee9f) ) + ROM_LOAD16_WORD_SWAP("mpr-19058.34", 0x0400000, 0x400000, CRC(e237c11c) SHA1(7c89cba757bd58747ed0d633b2fe7ef559fcd15e) ) +ROM_END + +ROM_START( lastbrnxu ) /* Last Bronx Revision A (USA), Model 2B - Sega ROM board ID# 834-12360 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19059a.15", 0x000000, 0x080000, CRC(25478257) SHA1(c6b7a5788617faff6cf612a824b29a9474db87f3) ) + ROM_LOAD32_WORD("epr-19060a.16", 0x000002, 0x080000, CRC(c48906b2) SHA1(a0904c97234f218caf489dc55e33082e453791a0) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19050.11", 0x000000, 0x400000, CRC(e6af2b61) SHA1(abdf7aa4c594f0916d4335c70fdd67dc6b1f4630) ) + ROM_LOAD32_WORD("mpr-19051.12", 0x000002, 0x400000, CRC(14b88961) SHA1(bec22f657c6d939c095b99ca9c6eb44b9683fd72) ) + ROM_LOAD32_WORD("mpr-19048.9", 0x800000, 0x400000, CRC(02180215) SHA1(cc5f8e61fee07aa4fc5bfe2d011088ee523c77c2) ) + ROM_LOAD32_WORD("mpr-19049.10", 0x800002, 0x400000, CRC(db7eecd6) SHA1(5955885ad2bfd69d7a2c4e1d1df907aca41fbdd0) ) + + ROM_REGION( 0x800000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19052.17", 0x000000, 0x400000, CRC(d7f27216) SHA1(b393af96522306dc2e055aea1e837979f41940d4) ) + ROM_LOAD32_WORD("mpr-19053.21", 0x000002, 0x400000, CRC(1f328465) SHA1(950a92209b7c24f66db62c31627a1f1d52721f1e) ) + + ROM_REGION( 0x800000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19055.27", 0x000000, 0x200000, CRC(85a57d49) SHA1(99c49fe135dc46fa861337b5bac654ae8478778a) ) + ROM_LOAD32_WORD("mpr-19054.25", 0x000002, 0x200000, CRC(05366277) SHA1(f618e2b9b26a1f7eccebfc8f8e17ef8ad9029be8) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("mpr-19056.31", 0x000000, 0x080000, CRC(22a22918) SHA1(baa039cd86650b6cd81f295916c4d256e60cb29c) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19057.32", 0x0000000, 0x400000, CRC(64809438) SHA1(aa008f83e1eff0daafe01944248ebae6054cee9f) ) + ROM_LOAD16_WORD_SWAP("mpr-19058.34", 0x0400000, 0x400000, CRC(e237c11c) SHA1(7c89cba757bd58747ed0d633b2fe7ef559fcd15e) ) +ROM_END + +ROM_START( lastbrnxj ) /* Last Bronx Revision A (Japan), Model 2B */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19046a.15", 0x000000, 0x080000, CRC(75be7b7a) SHA1(e57320ac3abac54b7b5278596979746ed1856188) ) + ROM_LOAD32_WORD("epr-19047a.16", 0x000002, 0x080000, CRC(1f5541e2) SHA1(87214f285a7bf67fbd824f2190cb9b2daf408193) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19050.11", 0x000000, 0x400000, CRC(e6af2b61) SHA1(abdf7aa4c594f0916d4335c70fdd67dc6b1f4630) ) + ROM_LOAD32_WORD("mpr-19051.12", 0x000002, 0x400000, CRC(14b88961) SHA1(bec22f657c6d939c095b99ca9c6eb44b9683fd72) ) + ROM_LOAD32_WORD("mpr-19048.9", 0x800000, 0x400000, CRC(02180215) SHA1(cc5f8e61fee07aa4fc5bfe2d011088ee523c77c2) ) + ROM_LOAD32_WORD("mpr-19049.10", 0x800002, 0x400000, CRC(db7eecd6) SHA1(5955885ad2bfd69d7a2c4e1d1df907aca41fbdd0) ) + + ROM_REGION( 0x800000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19052.17", 0x000000, 0x400000, CRC(d7f27216) SHA1(b393af96522306dc2e055aea1e837979f41940d4) ) + ROM_LOAD32_WORD("mpr-19053.21", 0x000002, 0x400000, CRC(1f328465) SHA1(950a92209b7c24f66db62c31627a1f1d52721f1e) ) + + ROM_REGION( 0x800000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19055.27", 0x000000, 0x200000, CRC(85a57d49) SHA1(99c49fe135dc46fa861337b5bac654ae8478778a) ) + ROM_LOAD32_WORD("mpr-19054.25", 0x000002, 0x200000, CRC(05366277) SHA1(f618e2b9b26a1f7eccebfc8f8e17ef8ad9029be8) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("mpr-19056.31", 0x000000, 0x080000, CRC(22a22918) SHA1(baa039cd86650b6cd81f295916c4d256e60cb29c) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19057.32", 0x0000000, 0x400000, CRC(64809438) SHA1(aa008f83e1eff0daafe01944248ebae6054cee9f) ) + ROM_LOAD16_WORD_SWAP("mpr-19058.34", 0x0400000, 0x400000, CRC(e237c11c) SHA1(7c89cba757bd58747ed0d633b2fe7ef559fcd15e) ) +ROM_END + +ROM_START( pltkidsa ) /* Pilot Kids, Model 2A */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-21281.pr0", 0x000000, 0x080000, CRC(293ead5d) SHA1(5a6295e543d7e68387de0ca4d88e930a0d8ed25c) ) + ROM_LOAD32_WORD("epr-21282.pr1", 0x000002, 0x080000, CRC(ed0e7b9e) SHA1(15f3fab6ac2dd40f32bda55503378ab14f998707) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-21262.da0", 0x000000, 0x400000, CRC(aa71353e) SHA1(6eb5e8284734f01beec1dbbee049b6b7672e2504) ) + ROM_LOAD32_WORD("mpr-21263.da1", 0x000002, 0x400000, CRC(d55d4509) SHA1(641db6ec3e9266f8265a4b541bcd8c2f7d164cc3) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-21264.tp0", 0x0000000, 0x400000, CRC(6b35204d) SHA1(3a07701b140eb3088fad29c8b2d9c1e1e7ef9471) ) + ROM_LOAD32_WORD("mpr-21268.tp1", 0x0000002, 0x400000, CRC(16ce2147) SHA1(39cba6b4f1130a3da7e2d226c948425eec34090e) ) + ROM_LOAD32_WORD("mpr-21265.tp2", 0x0800000, 0x400000, CRC(f061e639) SHA1(a89b7a84192fcc1e9e0fe9adf7446f7b275d5a03) ) + ROM_LOAD32_WORD("mpr-21269.tp3", 0x0800002, 0x400000, CRC(8c06255e) SHA1(9a8c302528e590be1b56ed301da30abf21f0be2e) ) + ROM_LOAD32_WORD("mpr-21266.tp4", 0x1000000, 0x400000, CRC(f9c32021) SHA1(b21f8bf281bf2cfcdc7e5eb798cd633e905ab8b8) ) + ROM_LOAD32_WORD("mpr-21270.tp5", 0x1000002, 0x400000, CRC(b61f81c3) SHA1(7733f44e791974070df139958eb97e0585ee50f8) ) + ROM_LOAD32_WORD("mpr-21267.tp6", 0x1800000, 0x400000, CRC(c42cc938) SHA1(6153f52add63295122e1215dd07d648d030a7306) ) + ROM_LOAD32_WORD("mpr-21271.tp7", 0x1800002, 0x400000, CRC(a5325c75) SHA1(d52836760475c7d9fbb4e5b8147ac416ffd1fcd9) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-21274.tx1", 0x0000000, 0x400000, CRC(f045e3d1) SHA1(548909d2da22ed98594e0ab6ecffebec4fca2f93) ) + ROM_LOAD32_WORD("mpr-21272.tx0", 0x0000002, 0x400000, CRC(dd605c21) SHA1(8363a082a666ceeb84df84929ff3fbaff49af821) ) + ROM_LOAD32_WORD("mpr-21275.tx3", 0x0800000, 0x400000, CRC(c4870b7c) SHA1(feb8a34acb620a36ed5aea92d22622a76d7e1b29) ) + ROM_LOAD32_WORD("mpr-21273.tx2", 0x0800002, 0x400000, CRC(722ec8a2) SHA1(1a1dc92488cde6284a96acce80e47a9cceccde76) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-21276.sd0", 0x000000, 0x080000, CRC(8f415bc3) SHA1(4e8e1ccbe025deca42fcf2582f3da46fa34780b7) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-21277.sd1", 0x0000000, 0x200000, CRC(bfba0ff6) SHA1(11081b3eabc33a42ecfc0b2b535ce16510496144) ) + ROM_LOAD16_WORD_SWAP("mpr-21278.sd2", 0x0200000, 0x200000, CRC(27e18e08) SHA1(254c0ad4d6bd572ff0efc3ea80489e73716a31a7) ) + ROM_LOAD16_WORD_SWAP("mpr-21279.sd3", 0x0400000, 0x200000, CRC(3a8dcf68) SHA1(312496b45b699051c8b4dd0e5d94e73fe5f3ad8d) ) + ROM_LOAD16_WORD_SWAP("mpr-21280.sd4", 0x0600000, 0x200000, CRC(aa548124) SHA1(a94adfe16b5c3236746451c181ccd3e1c27432f4) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD + + // 1998 317-5044-COM Model 2 + ROM_PARAMETER( ":315_5881:key", "042e2dc1" ) +ROM_END + +ROM_START( pltkids ) /* Pilot Kids Revision A, Model 2B */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-21285a.15", 0x000000, 0x080000, CRC(bdde5b41) SHA1(14c3f5031f85c6756c00bc67765a967ebaf7eb7f) ) + ROM_LOAD32_WORD("epr-21286a.16", 0x000002, 0x080000, CRC(c8092e0e) SHA1(01030621efa9c97eb43f4a5e3e029ec99a2363c5) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-21262.da0", 0x000000, 0x400000, CRC(aa71353e) SHA1(6eb5e8284734f01beec1dbbee049b6b7672e2504) ) + ROM_LOAD32_WORD("mpr-21263.da1", 0x000002, 0x400000, CRC(d55d4509) SHA1(641db6ec3e9266f8265a4b541bcd8c2f7d164cc3) ) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-21264.tp0", 0x0000000, 0x400000, CRC(6b35204d) SHA1(3a07701b140eb3088fad29c8b2d9c1e1e7ef9471) ) + ROM_LOAD32_WORD("mpr-21268.tp1", 0x0000002, 0x400000, CRC(16ce2147) SHA1(39cba6b4f1130a3da7e2d226c948425eec34090e) ) + ROM_LOAD32_WORD("mpr-21265.tp2", 0x0800000, 0x400000, CRC(f061e639) SHA1(a89b7a84192fcc1e9e0fe9adf7446f7b275d5a03) ) + ROM_LOAD32_WORD("mpr-21269.tp3", 0x0800002, 0x400000, CRC(8c06255e) SHA1(9a8c302528e590be1b56ed301da30abf21f0be2e) ) + ROM_LOAD32_WORD("mpr-21266.tp4", 0x1000000, 0x400000, CRC(f9c32021) SHA1(b21f8bf281bf2cfcdc7e5eb798cd633e905ab8b8) ) + ROM_LOAD32_WORD("mpr-21270.tp5", 0x1000002, 0x400000, CRC(b61f81c3) SHA1(7733f44e791974070df139958eb97e0585ee50f8) ) + ROM_LOAD32_WORD("mpr-21267.tp6", 0x1800000, 0x400000, CRC(c42cc938) SHA1(6153f52add63295122e1215dd07d648d030a7306) ) + ROM_LOAD32_WORD("mpr-21271.tp7", 0x1800002, 0x400000, CRC(a5325c75) SHA1(d52836760475c7d9fbb4e5b8147ac416ffd1fcd9) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-21274.tx1", 0x0000000, 0x400000, CRC(f045e3d1) SHA1(548909d2da22ed98594e0ab6ecffebec4fca2f93) ) + ROM_LOAD32_WORD("mpr-21272.tx0", 0x0000002, 0x400000, CRC(dd605c21) SHA1(8363a082a666ceeb84df84929ff3fbaff49af821) ) + ROM_LOAD32_WORD("mpr-21275.tx3", 0x0800000, 0x400000, CRC(c4870b7c) SHA1(feb8a34acb620a36ed5aea92d22622a76d7e1b29) ) + ROM_LOAD32_WORD("mpr-21273.tx2", 0x0800002, 0x400000, CRC(722ec8a2) SHA1(1a1dc92488cde6284a96acce80e47a9cceccde76) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-21276.sd0", 0x000000, 0x080000, CRC(8f415bc3) SHA1(4e8e1ccbe025deca42fcf2582f3da46fa34780b7) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-21277.sd1", 0x0000000, 0x200000, CRC(bfba0ff6) SHA1(11081b3eabc33a42ecfc0b2b535ce16510496144) ) + ROM_LOAD16_WORD_SWAP("mpr-21278.sd2", 0x0200000, 0x200000, CRC(27e18e08) SHA1(254c0ad4d6bd572ff0efc3ea80489e73716a31a7) ) + ROM_LOAD16_WORD_SWAP("mpr-21279.sd3", 0x0400000, 0x200000, CRC(3a8dcf68) SHA1(312496b45b699051c8b4dd0e5d94e73fe5f3ad8d) ) + ROM_LOAD16_WORD_SWAP("mpr-21280.sd4", 0x0600000, 0x200000, CRC(aa548124) SHA1(a94adfe16b5c3236746451c181ccd3e1c27432f4) ) + + // 1998 317-5044-COM Model 2 + ROM_PARAMETER( ":315_5881:key", "042e2dc1" ) +ROM_END + +ROM_START( indy500 ) /* Defaults to Twin (Stand Alone) Cab version. 2 credits to start - Can be set to Deluxe setting in service mode, Sega Game ID# 833-12361 INDY 500EXP, ROM board ID# 834-12362 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-18598a.15", 0x000000, 0x080000, CRC(3cdcac0f) SHA1(2f616e363f4d246fece309e81325e5e3c4e9d9f8) ) /* Higher rom numbers indicate a newer version */ + ROM_LOAD32_WORD("epr-18599a.16", 0x000002, 0x080000, CRC(32bde9a2) SHA1(0982952ab3c5b035f37beb9304ac950c0e78aea8) ) /* Different attract mode... what else??? */ + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-18237.11", 0x0000000, 0x400000, CRC(37e4255a) SHA1(3ee69a5b9364048dfab242773d97f3af430845b7) ) + ROM_LOAD32_WORD("mpr-18238.12", 0x0000002, 0x400000, CRC(bf837bac) SHA1(6624417b65f15f20427bc42c27283f10342c76b5) ) + ROM_LOAD32_WORD("mpr-18239.9", 0x0800000, 0x400000, CRC(9a2db86e) SHA1(0b81f6037657af7d96ed5e9bfef407d87cbcc294) ) + ROM_LOAD32_WORD("mpr-18240.10", 0x0800002, 0x400000, CRC(ab46a35f) SHA1(67da857db7155a858a1fa575b6c50f4be3c9ab7c) ) + ROM_LOAD32_WORD("epr-18596.7", 0x1000000, 0x080000, CRC(8be1a5cd) SHA1(56ed21234c6494d95b4efda6c3374199c5ac65db) ) + ROM_LOAD32_WORD("epr-18597.8", 0x1000002, 0x080000, CRC(44824e38) SHA1(f0fb0d73c1e72ce77c3931d436c54c034d2107a8) ) + ROM_COPY( "main_data", 0x1000000, 0x1100000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1200000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1300000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1400000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1500000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1600000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1700000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1800000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1900000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1a00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1b00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1c00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1d00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1e00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1f00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) + ROM_LOAD32_WORD("epr-18249.29", 0x000000, 0x080000, CRC(a399f023) SHA1(8b453313c16d935701ed7dbf71c1607c40aede63) ) + ROM_LOAD32_WORD("epr-18250.30", 0x000002, 0x080000, CRC(7479ad52) SHA1(d453e25709cd5970cd21bdc8b4785bc8eb5a50d7) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-18233.17", 0x000000, 0x400000, CRC(48a024d3) SHA1(501c6ab969713187025331942f922cb0e8efa69a) ) + ROM_LOAD32_WORD("mpr-18234.21", 0x000002, 0x400000, CRC(1178bfc8) SHA1(4a9982fdce08f9d375371763dd5287e8485c24b1) ) + ROM_LOAD32_WORD("mpr-18235.18", 0x800000, 0x400000, CRC(e7d70d59) SHA1(6081739c15a634d5cc7680a4fc7decead93540ed) ) + ROM_LOAD32_WORD("mpr-18236.22", 0x800002, 0x400000, CRC(6ca29e0e) SHA1(5de8b569d2a91047836f4a251c21db82fd7841c9) ) + + ROM_REGION( 0x800000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-18232.27", 0x000000, 0x400000, CRC(f962347d) SHA1(79f07ee6b821724294ca9e7a079cb33249102508) ) + ROM_LOAD32_WORD("mpr-18231.25", 0x000002, 0x400000, CRC(673d5338) SHA1(ce592857496ccc0a51efb377cf7cccc000b4296b) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-18600.31", 0x000000, 0x040000, CRC(269ee4a0) SHA1(8ebabfcd27d634ff0bead0a1f138efc8708575e7) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-18241.32", 0x0000000, 0x200000, CRC(3a380ae1) SHA1(114113325e9e5262af8750c05089f24818943cde) ) + ROM_LOAD16_WORD_SWAP("mpr-18242.33", 0x0200000, 0x200000, CRC(1cc3deae) SHA1(5c9cb8ce43a909b25b4e734c6a4ffd786f4dde31) ) + ROM_LOAD16_WORD_SWAP("mpr-18243.34", 0x0400000, 0x200000, CRC(a00a0053) SHA1(9c24fbcd0318c7e195dd153d6ba05e8c1e052968) ) + ROM_LOAD16_WORD_SWAP("mpr-18244.35", 0x0600000, 0x200000, CRC(bfa75beb) SHA1(fec89260d887e90ee9c2803e2eaf937cf9bfa10b) ) +ROM_END + +ROM_START( indy500d ) /* Defaults to Deluxe (Stand Alone) Cab version. 3 credits to start - Can be set to Twin setting in service mode, Sega Game ID# 833-11992, ROM board ID# 834-11993 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-18251a.15", 0x000000, 0x080000, CRC(fdabb40b) SHA1(e60a4814b54b76c7c0a4d9cf2b093c577c2f6ecf) ) + ROM_LOAD32_WORD("epr-18252a.16", 0x000002, 0x080000, CRC(4935832a) SHA1(8fc9244fd0eaf93d016f4494604e5a70bf1f7303) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-18237.11", 0x0000000, 0x400000, CRC(37e4255a) SHA1(3ee69a5b9364048dfab242773d97f3af430845b7) ) + ROM_LOAD32_WORD("mpr-18238.12", 0x0000002, 0x400000, CRC(bf837bac) SHA1(6624417b65f15f20427bc42c27283f10342c76b5) ) + ROM_LOAD32_WORD("mpr-18239.9", 0x0800000, 0x400000, CRC(9a2db86e) SHA1(0b81f6037657af7d96ed5e9bfef407d87cbcc294) ) + ROM_LOAD32_WORD("mpr-18240.10", 0x0800002, 0x400000, CRC(ab46a35f) SHA1(67da857db7155a858a1fa575b6c50f4be3c9ab7c) ) + ROM_LOAD32_WORD("epr-18245.7", 0x1000000, 0x080000, CRC(854b1037) SHA1(6bbbae53e2f56ab1007f37fdd5eb66dda4828c28) ) + ROM_LOAD32_WORD("epr-18246.8", 0x1000002, 0x080000, CRC(1a68acdc) SHA1(425ca92d75054a17313732a9d11bbb31bea17a38) ) + ROM_COPY( "main_data", 0x1000000, 0x1100000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1200000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1300000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1400000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1500000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1600000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1700000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1800000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1900000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1a00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1b00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1c00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1d00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1e00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1f00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) + ROM_LOAD32_WORD("epr-18249.29", 0x000000, 0x080000, CRC(a399f023) SHA1(8b453313c16d935701ed7dbf71c1607c40aede63) ) + ROM_LOAD32_WORD("epr-18250.30", 0x000002, 0x080000, CRC(7479ad52) SHA1(d453e25709cd5970cd21bdc8b4785bc8eb5a50d7) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-18233.17", 0x000000, 0x400000, CRC(48a024d3) SHA1(501c6ab969713187025331942f922cb0e8efa69a) ) + ROM_LOAD32_WORD("mpr-18234.21", 0x000002, 0x400000, CRC(1178bfc8) SHA1(4a9982fdce08f9d375371763dd5287e8485c24b1) ) + ROM_LOAD32_WORD("mpr-18235.18", 0x800000, 0x400000, CRC(e7d70d59) SHA1(6081739c15a634d5cc7680a4fc7decead93540ed) ) + ROM_LOAD32_WORD("mpr-18236.22", 0x800002, 0x400000, CRC(6ca29e0e) SHA1(5de8b569d2a91047836f4a251c21db82fd7841c9) ) + + ROM_REGION( 0x800000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-18232.27", 0x000000, 0x400000, CRC(f962347d) SHA1(79f07ee6b821724294ca9e7a079cb33249102508) ) + ROM_LOAD32_WORD("mpr-18231.25", 0x000002, 0x400000, CRC(673d5338) SHA1(ce592857496ccc0a51efb377cf7cccc000b4296b) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-18253.31", 0x000000, 0x040000, CRC(2934e034) SHA1(4a3037b69c4835ef16a20c5573de32a862f0b13e) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-18241.32", 0x0000000, 0x200000, CRC(3a380ae1) SHA1(114113325e9e5262af8750c05089f24818943cde) ) + ROM_LOAD16_WORD_SWAP("mpr-18242.33", 0x0200000, 0x200000, CRC(1cc3deae) SHA1(5c9cb8ce43a909b25b4e734c6a4ffd786f4dde31) ) + ROM_LOAD16_WORD_SWAP("mpr-18243.34", 0x0400000, 0x200000, CRC(a00a0053) SHA1(9c24fbcd0318c7e195dd153d6ba05e8c1e052968) ) + ROM_LOAD16_WORD_SWAP("mpr-18244.35", 0x0600000, 0x200000, CRC(bfa75beb) SHA1(fec89260d887e90ee9c2803e2eaf937cf9bfa10b) ) +ROM_END + +ROM_START( indy500to ) /* Defaults to Twin (Stand Alone) Cab version. 2 credits to start - Can be set to Deluxe setting in service mode, Sega Game ID# 833-11994, ROM board ID# 834-11995 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-18254a.15", 0x000000, 0x080000, CRC(ad0f1fc5) SHA1(0bff35fc1d892aaffbf1a3965bf3109c54839f4b) ) + ROM_LOAD32_WORD("epr-18255a.16", 0x000002, 0x080000, CRC(784daab8) SHA1(299e87f8ec7bdefa6f94f4ab65e29e91f290611e) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-18237.11", 0x0000000, 0x400000, CRC(37e4255a) SHA1(3ee69a5b9364048dfab242773d97f3af430845b7) ) + ROM_LOAD32_WORD("mpr-18238.12", 0x0000002, 0x400000, CRC(bf837bac) SHA1(6624417b65f15f20427bc42c27283f10342c76b5) ) + ROM_LOAD32_WORD("mpr-18239.9", 0x0800000, 0x400000, CRC(9a2db86e) SHA1(0b81f6037657af7d96ed5e9bfef407d87cbcc294) ) + ROM_LOAD32_WORD("mpr-18240.10", 0x0800002, 0x400000, CRC(ab46a35f) SHA1(67da857db7155a858a1fa575b6c50f4be3c9ab7c) ) + ROM_LOAD32_WORD("epr-18389.7", 0x1000000, 0x080000, CRC(d22ea019) SHA1(ef10bb0ffcb1bbcf4672bb5f705a27679a793764) ) + ROM_LOAD32_WORD("epr-18390.8", 0x1000002, 0x080000, CRC(38e796e5) SHA1(b23cfe45c363d616a65decd57aeb8ae61d5370e9) ) + ROM_COPY( "main_data", 0x1000000, 0x1100000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1200000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1300000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1400000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1500000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1600000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1700000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1800000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1900000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1a00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1b00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1c00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1d00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1e00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1f00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) + ROM_LOAD32_WORD("epr-18249.29", 0x000000, 0x080000, CRC(a399f023) SHA1(8b453313c16d935701ed7dbf71c1607c40aede63) ) + ROM_LOAD32_WORD("epr-18250.30", 0x000002, 0x080000, CRC(7479ad52) SHA1(d453e25709cd5970cd21bdc8b4785bc8eb5a50d7) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-18233.17", 0x000000, 0x400000, CRC(48a024d3) SHA1(501c6ab969713187025331942f922cb0e8efa69a) ) + ROM_LOAD32_WORD("mpr-18234.21", 0x000002, 0x400000, CRC(1178bfc8) SHA1(4a9982fdce08f9d375371763dd5287e8485c24b1) ) + ROM_LOAD32_WORD("mpr-18235.18", 0x800000, 0x400000, CRC(e7d70d59) SHA1(6081739c15a634d5cc7680a4fc7decead93540ed) ) + ROM_LOAD32_WORD("mpr-18236.22", 0x800002, 0x400000, CRC(6ca29e0e) SHA1(5de8b569d2a91047836f4a251c21db82fd7841c9) ) + + ROM_REGION( 0x800000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-18232.27", 0x000000, 0x400000, CRC(f962347d) SHA1(79f07ee6b821724294ca9e7a079cb33249102508) ) + ROM_LOAD32_WORD("mpr-18231.25", 0x000002, 0x400000, CRC(673d5338) SHA1(ce592857496ccc0a51efb377cf7cccc000b4296b) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-18391.31", 0x000000, 0x040000, CRC(79579b72) SHA1(36fed8a9eeb34968b2852ea8fc9198427f0d27c6) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-18241.32", 0x0000000, 0x200000, CRC(3a380ae1) SHA1(114113325e9e5262af8750c05089f24818943cde) ) + ROM_LOAD16_WORD_SWAP("mpr-18242.33", 0x0200000, 0x200000, CRC(1cc3deae) SHA1(5c9cb8ce43a909b25b4e734c6a4ffd786f4dde31) ) + ROM_LOAD16_WORD_SWAP("mpr-18243.34", 0x0400000, 0x200000, CRC(a00a0053) SHA1(9c24fbcd0318c7e195dd153d6ba05e8c1e052968) ) + ROM_LOAD16_WORD_SWAP("mpr-18244.35", 0x0600000, 0x200000, CRC(bfa75beb) SHA1(fec89260d887e90ee9c2803e2eaf937cf9bfa10b) ) +ROM_END + +ROM_START( waverunr ) /* Wave Runner Revision A (Japan), Model 2C, Sega Game ID# 833-12838, ROM board ID# 834-12839 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19282a.15", 0x000000, 0x080000, CRC(5df58604) SHA1(a136bb80746f37450be51f98ca60791b4022035d) ) + ROM_LOAD32_WORD("epr-19283a.16", 0x000002, 0x080000, CRC(bca188e1) SHA1(428f156f60e61ef314b7b50474abddf6d4dc2aca) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19291.11", 0x0000000, 0x400000, CRC(54431d67) SHA1(25e25d9ecf3b3b1c8f5e017243cc5e02f7a13015) ) + ROM_LOAD32_WORD("mpr-19292.12", 0x0000002, 0x400000, CRC(9152d979) SHA1(0e86e21e1c88263c548e03bce48ed4ce75643596) ) + ROM_LOAD32_WORD("mpr-19293.9", 0x0800000, 0x400000, CRC(b168bea9) SHA1(0497e886ccd5e5ef0cd8670200bf4cf64d9bfc2b) ) + ROM_LOAD32_WORD("mpr-19294.10", 0x0800002, 0x400000, CRC(c731e659) SHA1(a898b03d66973a49deb9799102ab1faf4384c376) ) + ROM_LOAD32_WORD("epr-19278.7", 0x1000000, 0x080000, CRC(29ed421d) SHA1(c91eb2d68acd6ded394e0bd9f504cbb8f421c3ed) ) + ROM_LOAD32_WORD("epr-19279.8", 0x1000002, 0x080000, CRC(6ae9f899) SHA1(da46379cabe5f151160b2558e255e9b64eaca22e) ) + ROM_COPY( "main_data", 0x1000000, 0x1100000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1200000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1300000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1400000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1500000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1600000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1700000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1800000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1900000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1a00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1b00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1c00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1d00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1e00000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1f00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) + ROM_LOAD32_WORD("epr-19280.29", 0x000000, 0x080000, CRC(c6b59fb9) SHA1(909663f440d19a34591d1f9707972c313e34f909) ) + ROM_LOAD32_WORD("epr-19281.30", 0x000002, 0x080000, CRC(5a6110e7) SHA1(39ba8a35fdcfdd6c88b44ab392ca0e958da44767) ) + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19287.17", 0x0000000, 0x400000, CRC(203b9e45) SHA1(8e677a106ceb9355632fadbdb837dc4a23c83684) ) + ROM_LOAD32_WORD("mpr-19288.21", 0x0000002, 0x400000, CRC(4a488e4d) SHA1(1e680680354d873c515c955256b0e4e72451326a)) + ROM_LOAD32_WORD("mpr-19289.18", 0x0800000, 0x400000, CRC(35361cb3) SHA1(f36033765c93274a1bcdd311fb2026aa2a8a0e42) ) + ROM_LOAD32_WORD("mpr-19290.22", 0x0800002, 0x400000, CRC(67300826) SHA1(6e6bf7c709202221e03a06d9e53147d67ab4404f) ) + ROM_LOAD32_WORD("epr-19304.19", 0x1000000, 0x080000, CRC(1a7d9521) SHA1(2fdb9344441c625c3841dfc62e424ddaf16416d5) ) + ROM_LOAD32_WORD("epr-19305.23", 0x1000002, 0x080000, CRC(00412412) SHA1(93db2c6d672c5c4bf1623edad8d4237c65c4f4e1) ) + ROM_COPY( "polygons", 0x1000000, 0x1100000, 0x100000 ) + ROM_COPY( "polygons", 0x1000000, 0x1200000, 0x100000 ) + ROM_COPY( "polygons", 0x1000000, 0x1300000, 0x100000 ) + ROM_COPY( "polygons", 0x1000000, 0x1400000, 0x100000 ) + ROM_COPY( "polygons", 0x1000000, 0x1500000, 0x100000 ) + ROM_COPY( "polygons", 0x1000000, 0x1600000, 0x100000 ) + ROM_COPY( "polygons", 0x1000000, 0x1700000, 0x100000 ) + ROM_COPY( "polygons", 0x1000000, 0x1800000, 0x100000 ) + ROM_COPY( "polygons", 0x1000000, 0x1900000, 0x100000 ) + ROM_COPY( "polygons", 0x1000000, 0x1a00000, 0x100000 ) + ROM_COPY( "polygons", 0x1000000, 0x1b00000, 0x100000 ) + ROM_COPY( "polygons", 0x1000000, 0x1c00000, 0x100000 ) + ROM_COPY( "polygons", 0x1000000, 0x1d00000, 0x100000 ) + ROM_COPY( "polygons", 0x1000000, 0x1e00000, 0x100000 ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19286.27", 0x000000, 0x400000, CRC(3ccc33cb) SHA1(1fe53306e370da724df5caace720107798fb24b9) ) + ROM_LOAD32_WORD("mpr-19285.25", 0x000002, 0x400000, CRC(a070fbd0) SHA1(2b5441b9d7d613b0a90dfea243e9de44980d219d) ) + ROM_LOAD32_WORD("epr-19303.28", 0x800000, 0x080000, CRC(fcffc8a0) SHA1(f4b776028f581329effa583022d8d65e889b6b0a) ) + ROM_LOAD32_WORD("epr-19302.26", 0x800002, 0x080000, CRC(bd00933a) SHA1(572b49a4d0189d0513c27753e3563909d1977f03) ) + ROM_COPY( "textures", 0x800000, 0x900000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xa00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xb00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xc00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xd00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xe00000, 0x100000 ) + ROM_COPY( "textures", 0x800000, 0xf00000, 0x100000 ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-19284.31", 0x000000, 0x040000, CRC(efe5f0f3) SHA1(5e36fc7cca92e2eab7d65434cb39597505a2f8cf) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19295.32", 0x0000000, 0x400000, CRC(b14eeb09) SHA1(2a6d1b14ea3c031cad9905e4b9b6973755689ee1) ) + ROM_LOAD16_WORD_SWAP("mpr-19296.34", 0x0400000, 0x400000, CRC(b4b9faff) SHA1(3a258e0f7c642d043cbab5f94dfe69fac8561e93) ) +ROM_END + +ROM_START( rchase2 ) /* Rail Chase 2 Revision A, Model 2B. Sega game ID# 833-11809 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-18045a.15", 0x000000, 0x080000, CRC(bfca0314) SHA1(9eb0f2cdab8c10fda9edc0ddc439263af3903cdc) ) + ROM_LOAD32_WORD("epr-18046a.16", 0x000002, 0x080000, CRC(0b8d3074) SHA1(fee8436399fb97ad5b8357b81e69bd5c27af1dde) ) + ROM_LOAD32_WORD("epr-18074a.13", 0x100000, 0x080000, CRC(ca4b58df) SHA1(d41cb8efd9fd65eea9e7aefadebfd0a27ef145fb) ) + ROM_LOAD32_WORD("epr-18075a.14", 0x100002, 0x080000, CRC(b82672e4) SHA1(519fdb5a978b6e82989b9841c6b59819f0d417cb) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-18037.11", 0x000000, 0x200000, CRC(dea8f896) SHA1(8eb45e46bd14a2ffbdaac47d381a1ea9b9a03ca2) ) + ROM_LOAD32_WORD("mpr-18038.12", 0x000002, 0x200000, CRC(441f7709) SHA1(cbfa687839b6cad6a5ace45b44b95c45e4cfab0d) ) + ROM_LOAD32_WORD("mpr-18039.9", 0x400000, 0x200000, CRC(b98c6f06) SHA1(dd1ff9c682778de1c6c09e7a5cbc95a8149488c4) ) + ROM_LOAD32_WORD("mpr-18040.10", 0x400002, 0x200000, CRC(0d872667) SHA1(33e56486ec6b953341552b6bc21dc66f6f8aaf74) ) + ROM_LOAD32_WORD("mpr-18041.7", 0x800000, 0x200000, CRC(e511ab0a) SHA1(c6ea14b3bdefdc59603bd2fc152ac0421fae4d6f) ) + ROM_LOAD32_WORD("mpr-18042.8", 0x800002, 0x200000, CRC(e9a04159) SHA1(0204ba86af2707bc9e277cac68dd9ef759189c23) ) + ROM_LOAD32_WORD("mpr-18043.5", 0xc00000, 0x200000, CRC(ff84dfd6) SHA1(82833bf4cb1f367aea5fec6cffb7023cbbd3c8cb) ) + ROM_LOAD32_WORD("mpr-18044.6", 0xc00002, 0x200000, CRC(ab9b406d) SHA1(62e95ceea6f71eedbebae59e188aac03e6129e62) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASEFF ) // Copro extra data (collision/height map/etc) + /* empty?? */ + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-18031.17", 0x0000000, 0x200000, CRC(25d0deae) SHA1(2d0339dd7eeb2625f78e2fbe4ebdc976967175a4) ) + ROM_LOAD32_WORD("mpr-18032.21", 0x0000002, 0x200000, CRC(dbae35c2) SHA1(9510104975192a0ef1750251636daff7f089feb9) ) + ROM_LOAD32_WORD("mpr-18033.18", 0x0400000, 0x200000, CRC(1e75946c) SHA1(7dee991f0c43de9bfe17ae44767f65f12e83c811) ) + ROM_LOAD32_WORD("mpr-18034.22", 0x0400002, 0x200000, CRC(215235ad) SHA1(48227544209412fca3035e85a00d33ea654dc7b5) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-18035.27", 0x000000, 0x200000, CRC(4423f66e) SHA1(c1f8dda4781dea00bd97dbf9ecfbb626dadd2c35) ) + ROM_LOAD32_WORD("mpr-18036.25", 0x000002, 0x200000, CRC(69221cf5) SHA1(e39644a08aa631dbdcfc7c0dc356e73f6a4412a9) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-18047.31", 0x000000, 0x080000, CRC(4c31d459) SHA1(424d5e5a7787d0d4c68aa919ba7d575babfd1ce0) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-18029.32", 0x0000000, 0x200000, CRC(f6804150) SHA1(ef40c11008c75d04159772ad30f02cdb8c5464f3) ) + ROM_LOAD16_WORD_SWAP("mpr-18030.34", 0x0400000, 0x200000, CRC(1167615d) SHA1(bae0060aec3c15f08342f11df665c05c5703523d) ) + + /* Z80 code located on the I/O board type 837-11694. Z80 @ 4Mhz with 8-way DSW & SONY CXD1095Q QFP64 chip */ + ROM_REGION( 0x8000, "iocpu", 0 ) + ROM_LOAD("epr-17895.ic8", 0x0000, 0x8000, CRC(8fd7003d) SHA1(b8b16e20e3ed07326330ba335ea1e701cc0bec17) ) +ROM_END + + +/* +Behind Enemy Lines +Sega, 1998 + +This game runs on Sega Model2 C-CRX hardware + +PCB No: 837-12469-01 +CPU : intel i960 +SOUND : MC68EC000FN12 +OSC : 32.000MHz (x3), 50.000MHz, 20.000MHz, 45.158MHz +DIPSW : 8 position (x1) +RAM : M5M44170CJ (x2), HM514270CJ7 (x1), HM538254BJ-7 (x4), N341256SJ-15 (x10) + UM62256EM-70LL (x4), TC18128CFWL-80V (x12), TC55V328AJ-15 (x3) + CY7C185-25VC (x7), CY7C188-25VC (x2), dt71256 (x4), BR6265BF-10SL (x2) + 65256BLFP-10T (x2), LH521002AK-20 (x16) + +CUSTOM: SEGA 315-5687 (128 QFP) + FUJITSU MB86235 (x2, 208 QFP) + SEGA 315-5673 (240 QFP) + SEGA 315-5798 (304 QFP) + SEGA 315-5799 (368 QFP) + SEGA 315-5725 (x2, 144 QFP) + SEGA 315-5292A (160 QFP) + SEGA 315-5648 (64 QFP) + SEGA 315-5672 (196 QFP) + SEGA 315-5649 (100 QFP) +PAL : 315-5879 +OTHER : D71051GU-10 + LATTICE PLSI 2032 80LJ D702S08 (x2) + TDA1386T + +Note: All epr* ROMs are 27C1024 + All mpr* ROMs are 16M MASK + +[JUMPERS] +JP1 2-3 +JP2 1-2 +JP3 2-3 +JP4 1-2 +JP5 1-2 +JP6 1-2 +JP7 1-2 +JP8 2-3 +JP9 2-3 +JP10 1-2 +JP11 1-2 +JP12 1-2 +JP13 1-2 +JP14 1-2 +JP15 2-3 +JP16 1-2 +JP17 1-2 +JP18 1-2 +JP19 1-2 +JP20 2-3 +JP21 2-3 +JP22 2-3 +JP23 2-3 +JP24 2-3 +*/ +ROM_START( bel ) /* Behind Enemy Lines, Model 2C */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-20225.15", 0x000000, 0x020000, CRC(4abc6b59) SHA1(cc6da75aafcbbc86720435182a66e8de065c8e99) ) + ROM_LOAD32_WORD("epr-20226.16", 0x000002, 0x020000, CRC(43e05b3a) SHA1(204b3cc6bbfdc92b4871c45fe4abff4ab4a66317) ) + ROM_LOAD32_WORD("epr-20223.13", 0x040000, 0x020000, CRC(61b1be98) SHA1(03c308c58a72bf3b78f41d5a9c0adaa7aad631c2) ) + ROM_LOAD32_WORD("epr-20224.14", 0x040002, 0x020000, CRC(eb2d7dbf) SHA1(f3b126e2fcef1cf673b239696ed8018241b1170e) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-20233.11", 0x000000, 0x200000, CRC(3e079a3b) SHA1(a3f15cd68a514cf80f0a40dbbb08e8b0489a0e4b) ) + ROM_LOAD32_WORD("mpr-20234.12", 0x000002, 0x200000, CRC(58bde826) SHA1(386d0d07738f579cb23e4168aceb26f56bcca1c1) ) + ROM_LOAD32_WORD("mpr-20231.9", 0x400000, 0x200000, CRC(b3393e93) SHA1(aa52ae307aa37faaaf86c326642af1946c5f4056) ) + ROM_LOAD32_WORD("mpr-20232.10", 0x400002, 0x200000, CRC(da4a2e11) SHA1(f9138813f6d1ca2126f5de10d8d69dcbb533aa0e) ) + ROM_LOAD32_WORD("mpr-20229.7", 0x800000, 0x200000, CRC(cdec7bf4) SHA1(510b6d41f1d32a9929379ba76037db137164cd43) ) + ROM_LOAD32_WORD("mpr-20230.8", 0x800002, 0x200000, CRC(a166fa87) SHA1(d4f6d4fba7f43b21f0bf9d948ec93b372425bf7c) ) + ROM_LOAD32_WORD("mpr-20227.5", 0xc00000, 0x200000, CRC(1277686e) SHA1(fff27006659458300001425261b944e690f1d494) ) + ROM_LOAD32_WORD("mpr-20228.6", 0xc00002, 0x200000, CRC(49cb5568) SHA1(ee3273302830f3499c7d4e548b629c51e0369e8a) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // TGPx4 program + ROM_LOAD32_WORD("mpr-20236.29", 0x000000, 0x200000, CRC(8de9a3c2) SHA1(e7fde1fd509531e1002ff813163067dc0d134536) ) + ROM_LOAD32_WORD("mpr-20235.30", 0x000002, 0x200000, CRC(78fa11ef) SHA1(a60deabb662e9c09f5d6342dc1a1c6045744d93f) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-20244.17", 0x0000000, 0x200000, CRC(9d2a8660) SHA1(59302e7119c9ff779ce0c871713fe3688c29cccb) ) + ROM_LOAD32_WORD("mpr-20240.21", 0x0000002, 0x200000, CRC(51615908) SHA1(c70252b0b6f17aa0cd9b5264d4166df8ab7d1784) ) + ROM_LOAD32_WORD("mpr-20243.18", 0x0400000, 0x200000, CRC(48671f7c) SHA1(b0bdc7f42450c8d9cebbcf43cf858f7399e378e4) ) + ROM_LOAD32_WORD("mpr-20239.22", 0x0400002, 0x200000, CRC(6cd8d8a5) SHA1(1c634fbbcbafb1c3825117682901a3264599b246) ) + ROM_LOAD32_WORD("mpr-20242.19", 0x0800000, 0x200000, CRC(e7f86ac7) SHA1(7b7724127b27834eaaa228050ceb779d8a027882) ) + ROM_LOAD32_WORD("mpr-20238.23", 0x0800002, 0x200000, CRC(0a480c7c) SHA1(239d2c9c49cb8ddc0d6aa956a497b494217f38d7) ) + ROM_LOAD32_WORD("mpr-20241.20", 0x0c00000, 0x200000, CRC(51974b98) SHA1(7d6ab9c0ccec77676222611bf200d2e067e20520) ) + ROM_LOAD32_WORD("mpr-20237.24", 0x0c00002, 0x200000, CRC(89b5d8b6) SHA1(6e0a0323d6a804f1f1e4404694cc1ea7dfbf2d95) ) + + ROM_REGION( 0xc00000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-20247.27", 0x000000, 0x200000, CRC(00b0417d) SHA1(5e9d38509c1e5273079a342a64ca2c956cd47e6d) ) + ROM_LOAD32_WORD("mpr-20245.25", 0x000002, 0x200000, CRC(36490a08) SHA1(a462e094c9a9ec4743e4bf2c4ce23357257a2a54) ) + ROM_LOAD32_WORD("mpr-20248.28", 0x800000, 0x200000, CRC(0ace6bef) SHA1(a231aeb7b984f5b927144f0eec4ef2282429494f) ) + ROM_LOAD32_WORD("mpr-20246.26", 0x800002, 0x200000, CRC(250d6ca1) SHA1(cd1d4bc0fcf89e47884b87863a09bb263bce72cc) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("mpr-20249.31", 0x000000, 0x020000, CRC(dc24f13d) SHA1(66ab8e843319d07663ef13f3d2299c6c7414071f) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-20250.32", 0x0000000, 0x200000, CRC(91b735d3) SHA1(b0e7e493fb20ebf30c17378199e49d529ffb3f20) ) + ROM_LOAD16_WORD_SWAP("mpr-20251.33", 0x0200000, 0x200000, CRC(703a947b) SHA1(95b8d3dc29e87e6537b288d8e946728e0b345dd0) ) + ROM_LOAD16_WORD_SWAP("mpr-20252.34", 0x0400000, 0x200000, CRC(8f48f375) SHA1(9e511e89e99c77f06a5fba033ca8f9b98bd86f91) ) + ROM_LOAD16_WORD_SWAP("mpr-20253.35", 0x0600000, 0x200000, CRC(ca6aa17c) SHA1(f6df2483ca75573449ba36638dbbed4be7843a44) ) +ROM_END + +ROM_START( overrev ) /* Over Rev Revision A, Model 2C */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-20124a.15", 0x000000, 0x080000, CRC(74beb8d7) SHA1(c65c641138ecd7312c4930702d1498b8a346175a) ) + ROM_LOAD32_WORD( "epr-20125a.16", 0x000002, 0x080000, CRC(def64456) SHA1(cedb64d2d99a73301ef45c2f5f860a9b87faf6a7) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-19996.11", 0x000000, 0x400000, CRC(21928a00) SHA1(6b439fd2b113b64df9378ef8180a17aa6fa975c5) ) + ROM_LOAD32_WORD( "mpr-19997.12", 0x000002, 0x400000, CRC(2a169cab) SHA1(dbf9af938afd0599d345c42c1df242e575c14de9) ) + ROM_LOAD32_WORD( "mpr-19994.9", 0x800000, 0x400000, CRC(e691fbd5) SHA1(b99c2f3f2a682966d792917dfcb8ed8e53bc0b7a) ) + ROM_LOAD32_WORD( "mpr-19995.10", 0x800002, 0x400000, CRC(82a7828e) SHA1(4336a12a07a67f94091b4a9b491bab02c375dd15) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // TGPx4 program (COPRO sockets) + + ROM_REGION( 0x800000, "polygons", 0 ) // Models (TGP sockets) + ROM_LOAD32_WORD( "mpr-19998.17", 0x000000, 0x200000, CRC(6a834574) SHA1(8be19bf42dbb157d6acde62a2018ef4c0d41aab4) ) + ROM_LOAD32_WORD( "mpr-19999.21", 0x000002, 0x200000, CRC(ff590a2d) SHA1(ad29e4270b4a2f82189fbab83358eb1200f43777) ) + + ROM_REGION( 0x400000, "textures", 0 ) // Textures (TEXTURE sockets) + ROM_LOAD32_WORD( "mpr-20001.27", 0x000000, 0x200000, CRC(6ca236aa) SHA1(b3cb89fadb42afed13be4f229d7158dee487978a) ) + ROM_LOAD32_WORD( "mpr-20000.25", 0x000002, 0x200000, CRC(894d8ded) SHA1(9bf7c754a29eef47fa49b5567980601895127306) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-20002.31", 0x000000, 0x080000, CRC(7efb069e) SHA1(30b1bbaf348d6a6b9ee2fdf82a0749baa025e0bf) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-20003.32", 0x000000, 0x400000, CRC(149ac22b) SHA1(c890bbaebbbb07b62bcb8a3a8edded9fa0ec9a1e) ) + ROM_LOAD16_WORD_SWAP( "mpr-20004.34", 0x400000, 0x400000, CRC(0b9c5410) SHA1(e5bb30702fc853ccc03316be07a334269d3ebb4a) ) +ROM_END + +/* + +Over Rev on MODEL2 B-CRX: + +The set below has been found labeled as: +Main board ID# 837-10854-02-91 + Sega Game ID# 836-12788 + ROM board ID# 836-12789 + +As well as: +Main board ID# 837-10854-02-91 + Sega Game ID# 836-13274 OVER REV + ROM board ID# 836-13275 + +These ID numbers have been verified on multiple board sets for both revision A and revision B program ROMs +*/ +ROM_START( overrevb ) /* Over Rev Revision B, Model 2B */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-19992b.15", 0x000000, 0x080000, CRC(6d3e78d5) SHA1(40d18ee284ea2e038f7e3d04db56e793ab3e3dd5) ) /* sum16 492A printed on label */ + ROM_LOAD32_WORD( "epr-19993b.16", 0x000002, 0x080000, CRC(765dc9ce) SHA1(a718c32ca27ec1fb5ed2d7d3797ea7e906510a04) ) /* sum16 B955 printed on label */ + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-19996.11", 0x000000, 0x400000, CRC(21928a00) SHA1(6b439fd2b113b64df9378ef8180a17aa6fa975c5) ) + ROM_LOAD32_WORD( "mpr-19997.12", 0x000002, 0x400000, CRC(2a169cab) SHA1(dbf9af938afd0599d345c42c1df242e575c14de9) ) + ROM_LOAD32_WORD( "mpr-19994.9", 0x800000, 0x400000, CRC(e691fbd5) SHA1(b99c2f3f2a682966d792917dfcb8ed8e53bc0b7a) ) + ROM_LOAD32_WORD( "mpr-19995.10", 0x800002, 0x400000, CRC(82a7828e) SHA1(4336a12a07a67f94091b4a9b491bab02c375dd15) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x800000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-19998.17", 0x000000, 0x200000, CRC(6a834574) SHA1(8be19bf42dbb157d6acde62a2018ef4c0d41aab4) ) + ROM_LOAD32_WORD( "mpr-19999.21", 0x000002, 0x200000, CRC(ff590a2d) SHA1(ad29e4270b4a2f82189fbab83358eb1200f43777) ) + + ROM_REGION( 0x400000, "textures", 0 ) // Textures + ROM_LOAD32_WORD( "mpr-20001.27", 0x000000, 0x200000, CRC(6ca236aa) SHA1(b3cb89fadb42afed13be4f229d7158dee487978a) ) + ROM_LOAD32_WORD( "mpr-20000.25", 0x000002, 0x200000, CRC(894d8ded) SHA1(9bf7c754a29eef47fa49b5567980601895127306) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-20002.31", 0x000000, 0x080000, CRC(7efb069e) SHA1(30b1bbaf348d6a6b9ee2fdf82a0749baa025e0bf) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-20003.32", 0x000000, 0x400000, CRC(149ac22b) SHA1(c890bbaebbbb07b62bcb8a3a8edded9fa0ec9a1e) ) + ROM_LOAD16_WORD_SWAP( "mpr-20004.34", 0x400000, 0x400000, CRC(0b9c5410) SHA1(e5bb30702fc853ccc03316be07a334269d3ebb4a) ) +ROM_END + +ROM_START( overrevba ) /* Over Rev Revision A, Model 2B */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-19992a.15", 0x000000, 0x080000, CRC(68d3c8a8) SHA1(360d42c502d16ba056f4bfa8bb1667c8c58df8e2) ) + ROM_LOAD32_WORD( "epr-19993a.16", 0x000002, 0x080000, CRC(9718eb58) SHA1(07e92d00843dd499e45654827e233723e18cc3e2) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-19996.11", 0x000000, 0x400000, CRC(21928a00) SHA1(6b439fd2b113b64df9378ef8180a17aa6fa975c5) ) + ROM_LOAD32_WORD( "mpr-19997.12", 0x000002, 0x400000, CRC(2a169cab) SHA1(dbf9af938afd0599d345c42c1df242e575c14de9) ) + ROM_LOAD32_WORD( "mpr-19994.9", 0x800000, 0x400000, CRC(e691fbd5) SHA1(b99c2f3f2a682966d792917dfcb8ed8e53bc0b7a) ) + ROM_LOAD32_WORD( "mpr-19995.10", 0x800002, 0x400000, CRC(82a7828e) SHA1(4336a12a07a67f94091b4a9b491bab02c375dd15) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x800000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-19998.17", 0x000000, 0x200000, CRC(6a834574) SHA1(8be19bf42dbb157d6acde62a2018ef4c0d41aab4) ) + ROM_LOAD32_WORD( "mpr-19999.21", 0x000002, 0x200000, CRC(ff590a2d) SHA1(ad29e4270b4a2f82189fbab83358eb1200f43777) ) + + ROM_REGION( 0x400000, "textures", 0 ) // Textures + ROM_LOAD32_WORD( "mpr-20001.27", 0x000000, 0x200000, CRC(6ca236aa) SHA1(b3cb89fadb42afed13be4f229d7158dee487978a) ) + ROM_LOAD32_WORD( "mpr-20000.25", 0x000002, 0x200000, CRC(894d8ded) SHA1(9bf7c754a29eef47fa49b5567980601895127306) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP( "epr-20002.31", 0x000000, 0x080000, CRC(7efb069e) SHA1(30b1bbaf348d6a6b9ee2fdf82a0749baa025e0bf) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP( "mpr-20003.32", 0x000000, 0x400000, CRC(149ac22b) SHA1(c890bbaebbbb07b62bcb8a3a8edded9fa0ec9a1e) ) + ROM_LOAD16_WORD_SWAP( "mpr-20004.34", 0x400000, 0x400000, CRC(0b9c5410) SHA1(e5bb30702fc853ccc03316be07a334269d3ebb4a) ) +ROM_END + +ROM_START( rascot2 ) /* Royal Ascot 2, Model 2C, Rom Board : 837-12485 Com Board : 837-12532 SDC-2 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-20166.15", 0x000000, 0x020000, CRC(520479a4) SHA1(02e14a7be299c2af36373595cf6f154312372a60) ) + ROM_LOAD32_WORD("epr-20167.16", 0x000002, 0x020000, CRC(e92f3d55) SHA1(a0b0df16484be0c45669982d87fe64a98f833549) ) + ROM_LOAD32_WORD("epr-20164.13", 0x040000, 0x020000, CRC(576a15dc) SHA1(34e02d79b4e9c36e9dd441edc6e8d2afd589c558) ) + ROM_LOAD32_WORD("epr-20165.14", 0x040002, 0x020000, CRC(7527f33b) SHA1(18c33173508ae43a2ab6a8f2d62e7735a6cd2898) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-20171.11", 0x000000, 0x400000, CRC(9f2327c6) SHA1(ed41d8b831bcf4dacbbd8bcaa92377cc95fc2a72) ) + ROM_LOAD32_WORD("mpr-20172.12", 0x000002, 0x400000, CRC(40b4f8e6) SHA1(7d4a1d604205148c6d94c320e1d6438ab706fa67) ) + ROM_LOAD32_WORD("mpr-20169.9", 0x800000, 0x400000, CRC(b5be4d6b) SHA1(cfb4696506efa0e93fab35bbeb87decd83aec040) ) + ROM_LOAD32_WORD("mpr-20170.10", 0x800002, 0x400000, CRC(7b05cf33) SHA1(9e392ea0c7a9f4cef76d46ad92a7cf814022c133) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00) // TGPx4 program + + ROM_REGION( 0x2000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-20173.17", 0x0000000, 0x400000, CRC(60bd684e) SHA1(893985808adb88fb54f0ca85ca23995d65360360) ) + ROM_LOAD32_WORD("mpr-20177.21", 0x0000002, 0x400000, CRC(4ba5199d) SHA1(5fa1cc56ec1d1c37d885c2d9a80fa93b9fbc4bce) ) + ROM_LOAD32_WORD("mpr-20174.18", 0x0800000, 0x400000, CRC(6751ada5) SHA1(1ff61c133a93d3663d6a748b13ebb33285909314) ) + ROM_LOAD32_WORD("mpr-20178.22", 0x0800002, 0x400000, CRC(f4fa00aa) SHA1(444805f403eac3b0377089176ead62aff7db7b96) ) + ROM_LOAD32_WORD("mpr-20175.19", 0x1000000, 0x400000, CRC(801f4eff) SHA1(f5375b59c818841d77ab38317be0f7b9dbe14969) ) + ROM_LOAD32_WORD("mpr-20179.23", 0x1000002, 0x400000, CRC(bd2c4e65) SHA1(bcc2f4cd37ebf4c36d00581e024281603d306123) ) + ROM_LOAD32_WORD("mpr-20176.20", 0x1800000, 0x400000, CRC(50cb6b5a) SHA1(02c869cf874aa2310d60062e1e9b88ee26d7fa02) ) + ROM_LOAD32_WORD("mpr-20180.24", 0x1800002, 0x400000, CRC(df16f2ca) SHA1(782a5ea3f713c47b55a9a5ecb5d36578977740a9) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-20183.27", 0x000000, 0x400000, CRC(48520d72) SHA1(4519b497e20898e3aaa6398eb98cad990010a2fa) ) + ROM_LOAD32_WORD("mpr-20181.25", 0x000002, 0x400000, CRC(99bfa480) SHA1(7176870b8fcc233440d31e1ca945fc4eb1dff204) ) + ROM_LOAD32_WORD("mpr-20184.28", 0x800000, 0x400000, CRC(b8df0b12) SHA1(391c6aa40f2f6296ba3aa2a6ea2414ef2487f80c) ) + ROM_LOAD32_WORD("mpr-20182.26", 0x800002, 0x400000, CRC(e3f085fe) SHA1(28efa84f6c04fbd285a9bcf6f651a57bfe54a507) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-20168.31", 0x000000, 0x020000, CRC(13a6a78d) SHA1(cbff422567b72d71607a42ea804c98b8c1e65824) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("epr-20185.32", 0x0000000, 0x200000, CRC(168cc361) SHA1(fbd2a9d99cc0afd7b5f0d9274916a0960d864118) ) +ROM_END + +ROM_START( topskatr ) /* Top Skater Revision A (Export), Model 2C, Sega Game ID# 833-13080-02, ROM board ID# 834-13081-02 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19755a.15", 0x000000, 0x080000, CRC(b80633b9) SHA1(5396da414beeb918e6f38f25a43dd76345a0c8ed) ) + ROM_LOAD32_WORD("epr-19756a.16", 0x000002, 0x080000, CRC(472046a2) SHA1(06d0f609257ba476e6bd3b956e0850e7167429ce) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19735.11", 0x000000, 0x400000, CRC(8e509266) SHA1(49afc91467f08befaf34e743cbe823de3e3c9d85) ) + ROM_LOAD32_WORD("mpr-19736.12", 0x000002, 0x400000, CRC(094e0a0d) SHA1(de2c739f71e51166263446b9f6a566866ab8bee8) ) + ROM_LOAD32_WORD("mpr-19737.9", 0x800000, 0x400000, CRC(281a7dde) SHA1(71d5ba434328a81969bfdc71ac1160c5ff3ae9d3) ) + ROM_LOAD32_WORD("mpr-19738.10", 0x800002, 0x400000, CRC(f688327e) SHA1(68c9db242ef7e8f98979e968a09e4b093bc5d470) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // TGPx4 program + ROM_LOAD32_WORD("mpr-19743.29", 0x000000, 0x200000, CRC(d41a41bf) SHA1(a5f6b24e6526d0d2ef9c526c273c018d1e0fed59) ) + ROM_LOAD32_WORD("mpr-19744.30", 0x000002, 0x200000, CRC(84f203bf) SHA1(4952b764e6bf6cd735018738c5eff08781ee2315) ) + + ROM_REGION( 0x400000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19741.17", 0x000000, 0x200000, CRC(111a6e29) SHA1(8664059f157626e4bbdcf8357e3d30b37d3c25b8) ) + ROM_LOAD32_WORD("mpr-19742.21", 0x000002, 0x200000, CRC(28510aff) SHA1(3e68aec090f36a60b3b70bc90f09e2f9ce088718) ) + + ROM_REGION( 0x800000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19740.27", 0x000000, 0x400000, CRC(b20f508b) SHA1(c90fa3b42d87291ea459ccc137f3a2f3eb7efec0) ) + ROM_LOAD32_WORD("mpr-19739.25", 0x000002, 0x400000, CRC(8120cfd8) SHA1(a82744bff5dcdfae296c7c3e8c3fbfda26324e85) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("mpr-19759.31", 0x000000, 0x080000, CRC(573530f2) SHA1(7b205085965d6694f8e75e29c4028f7cb6f631ab) ) + + ROM_REGION( 0x20000, "cpu3", 0) // DSB program + ROM_LOAD16_WORD_SWAP("mpr-19760.2s", 0x000000, 0x20000, CRC(2e41ca15) SHA1(a302209bfe0f1491dff2da64b32cfaa13c3d3304) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19745.32", 0x000000, 0x400000, CRC(7082a0af) SHA1(415f9d0793a697cb1719bbd96370f4a741866527) ) + ROM_LOAD16_WORD_SWAP("mpr-19746.34", 0x400000, 0x400000, CRC(657b5977) SHA1(ca76f211d68b6b55678a4d7949bfd2ddef1b1710) ) + + ROM_REGION( 0x1000000, "mpeg", 0 ) // MPEG audio data + ROM_LOAD("mpr-19747.18s", 0x000000, 0x400000, CRC(6e895aaa) SHA1(4c67c1e1d58a3034bbd711252a78689db9f235bb) ) + ROM_LOAD("mpr-19748.20s", 0x400000, 0x400000, CRC(fcd74de3) SHA1(fd4da4cf40c4342c6263cf22eee5968292a4d2c0) ) + ROM_LOAD("mpr-19749.22s", 0x800000, 0x400000, CRC(842ca1eb) SHA1(6ee6b2eb2ea400bdb9c0a9b4a126b4b86886e813) ) + ROM_LOAD("mpr-19750.24s", 0xc00000, 0x400000, CRC(cd95d0bf) SHA1(40e2a2980c89049c339fefd48bf7aac79962cd2e) ) +ROM_END + +ROM_START( topskatruo ) /* Top Skater (USA), Model 2C, Sega Game ID# 833-13080-01, ROM board ID# 834-13081-01 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-19753.15", 0x000000, 0x080000, CRC(179a0954) SHA1(5d82455808e80ab6de615848fbefce7f4def12d0) ) + ROM_LOAD32_WORD( "epr-19754.16", 0x000002, 0x080000, CRC(a4c62e01) SHA1(45ae0219a15b96f2283cd8e3df1940f6d48a3f63) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19735.11", 0x000000, 0x400000, CRC(8e509266) SHA1(49afc91467f08befaf34e743cbe823de3e3c9d85) ) + ROM_LOAD32_WORD("mpr-19736.12", 0x000002, 0x400000, CRC(094e0a0d) SHA1(de2c739f71e51166263446b9f6a566866ab8bee8) ) + ROM_LOAD32_WORD("mpr-19737.9", 0x800000, 0x400000, CRC(281a7dde) SHA1(71d5ba434328a81969bfdc71ac1160c5ff3ae9d3) ) + ROM_LOAD32_WORD("mpr-19738.10", 0x800002, 0x400000, CRC(f688327e) SHA1(68c9db242ef7e8f98979e968a09e4b093bc5d470) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // TGPx4 program + ROM_LOAD32_WORD("mpr-19743.29", 0x000000, 0x200000, CRC(d41a41bf) SHA1(a5f6b24e6526d0d2ef9c526c273c018d1e0fed59) ) + ROM_LOAD32_WORD("mpr-19744.30", 0x000002, 0x200000, CRC(84f203bf) SHA1(4952b764e6bf6cd735018738c5eff08781ee2315) ) + + ROM_REGION( 0x400000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19741.17", 0x000000, 0x200000, CRC(111a6e29) SHA1(8664059f157626e4bbdcf8357e3d30b37d3c25b8) ) + ROM_LOAD32_WORD("mpr-19742.21", 0x000002, 0x200000, CRC(28510aff) SHA1(3e68aec090f36a60b3b70bc90f09e2f9ce088718) ) + + ROM_REGION( 0x800000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19740.27", 0x000000, 0x400000, CRC(b20f508b) SHA1(c90fa3b42d87291ea459ccc137f3a2f3eb7efec0) ) + ROM_LOAD32_WORD("mpr-19739.25", 0x000002, 0x400000, CRC(8120cfd8) SHA1(a82744bff5dcdfae296c7c3e8c3fbfda26324e85) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("mpr-19759.31", 0x000000, 0x080000, CRC(573530f2) SHA1(7b205085965d6694f8e75e29c4028f7cb6f631ab) ) + + ROM_REGION( 0x20000, "cpu3", 0) // DSB program + ROM_LOAD16_WORD_SWAP("mpr-19760.2s", 0x000000, 0x20000, CRC(2e41ca15) SHA1(a302209bfe0f1491dff2da64b32cfaa13c3d3304) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19745.32", 0x000000, 0x400000, CRC(7082a0af) SHA1(415f9d0793a697cb1719bbd96370f4a741866527) ) + ROM_LOAD16_WORD_SWAP("mpr-19746.34", 0x400000, 0x400000, CRC(657b5977) SHA1(ca76f211d68b6b55678a4d7949bfd2ddef1b1710) ) + + ROM_REGION( 0x1000000, "mpeg", 0 ) // MPEG audio data + ROM_LOAD("mpr-19747.18s", 0x000000, 0x400000, CRC(6e895aaa) SHA1(4c67c1e1d58a3034bbd711252a78689db9f235bb) ) + ROM_LOAD("mpr-19748.20s", 0x400000, 0x400000, CRC(fcd74de3) SHA1(fd4da4cf40c4342c6263cf22eee5968292a4d2c0) ) + ROM_LOAD("mpr-19749.22s", 0x800000, 0x400000, CRC(842ca1eb) SHA1(6ee6b2eb2ea400bdb9c0a9b4a126b4b86886e813) ) + ROM_LOAD("mpr-19750.24s", 0xc00000, 0x400000, CRC(cd95d0bf) SHA1(40e2a2980c89049c339fefd48bf7aac79962cd2e) ) +ROM_END + +ROM_START( topskatru ) /* Top Skater Revision A (USA), Model 2C, Sega Game ID# 833-13080-01, ROM board ID# 834-13081-01 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-19753a.15", 0x000000, 0x080000, CRC(3b3028de) SHA1(717ebf0ccd87128a24776e618cf15f07aaf48537) ) + ROM_LOAD32_WORD( "epr-19754a.16", 0x000002, 0x080000, CRC(17535b98) SHA1(a2329d09821900ec4f867caf1a93759085bd0a62) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19735.11", 0x000000, 0x400000, CRC(8e509266) SHA1(49afc91467f08befaf34e743cbe823de3e3c9d85) ) + ROM_LOAD32_WORD("mpr-19736.12", 0x000002, 0x400000, CRC(094e0a0d) SHA1(de2c739f71e51166263446b9f6a566866ab8bee8) ) + ROM_LOAD32_WORD("mpr-19737.9", 0x800000, 0x400000, CRC(281a7dde) SHA1(71d5ba434328a81969bfdc71ac1160c5ff3ae9d3) ) + ROM_LOAD32_WORD("mpr-19738.10", 0x800002, 0x400000, CRC(f688327e) SHA1(68c9db242ef7e8f98979e968a09e4b093bc5d470) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // TGPx4 program + ROM_LOAD32_WORD("mpr-19743.29", 0x000000, 0x200000, CRC(d41a41bf) SHA1(a5f6b24e6526d0d2ef9c526c273c018d1e0fed59) ) + ROM_LOAD32_WORD("mpr-19744.30", 0x000002, 0x200000, CRC(84f203bf) SHA1(4952b764e6bf6cd735018738c5eff08781ee2315) ) + + ROM_REGION( 0x400000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19741.17", 0x000000, 0x200000, CRC(111a6e29) SHA1(8664059f157626e4bbdcf8357e3d30b37d3c25b8) ) + ROM_LOAD32_WORD("mpr-19742.21", 0x000002, 0x200000, CRC(28510aff) SHA1(3e68aec090f36a60b3b70bc90f09e2f9ce088718) ) + + ROM_REGION( 0x800000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19740.27", 0x000000, 0x400000, CRC(b20f508b) SHA1(c90fa3b42d87291ea459ccc137f3a2f3eb7efec0) ) + ROM_LOAD32_WORD("mpr-19739.25", 0x000002, 0x400000, CRC(8120cfd8) SHA1(a82744bff5dcdfae296c7c3e8c3fbfda26324e85) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("mpr-19759.31", 0x000000, 0x080000, CRC(573530f2) SHA1(7b205085965d6694f8e75e29c4028f7cb6f631ab) ) + + ROM_REGION( 0x20000, "cpu3", 0) // DSB program + ROM_LOAD16_WORD_SWAP("mpr-19760.2s", 0x000000, 0x20000, CRC(2e41ca15) SHA1(a302209bfe0f1491dff2da64b32cfaa13c3d3304) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19745.32", 0x000000, 0x400000, CRC(7082a0af) SHA1(415f9d0793a697cb1719bbd96370f4a741866527) ) + ROM_LOAD16_WORD_SWAP("mpr-19746.34", 0x400000, 0x400000, CRC(657b5977) SHA1(ca76f211d68b6b55678a4d7949bfd2ddef1b1710) ) + + ROM_REGION( 0x1000000, "mpeg", 0 ) // MPEG audio data + ROM_LOAD("mpr-19747.18s", 0x000000, 0x400000, CRC(6e895aaa) SHA1(4c67c1e1d58a3034bbd711252a78689db9f235bb) ) + ROM_LOAD("mpr-19748.20s", 0x400000, 0x400000, CRC(fcd74de3) SHA1(fd4da4cf40c4342c6263cf22eee5968292a4d2c0) ) + ROM_LOAD("mpr-19749.22s", 0x800000, 0x400000, CRC(842ca1eb) SHA1(6ee6b2eb2ea400bdb9c0a9b4a126b4b86886e813) ) + ROM_LOAD("mpr-19750.24s", 0xc00000, 0x400000, CRC(cd95d0bf) SHA1(40e2a2980c89049c339fefd48bf7aac79962cd2e) ) +ROM_END + +ROM_START( topskatrj ) /* Top Skater (Japan), Model 2C, Sega Game ID# 833-13080-03, ROM board ID# 834-13081-03 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-19751.15", 0x000000, 0x080000, CRC(d615a15f) SHA1(ca998de446c4c423db186696f3478f3daa4f8373) ) + ROM_LOAD32_WORD( "epr-19752.16", 0x000002, 0x080000, CRC(42f0ba8b) SHA1(f72f25cbd380918b919c11a7d2051948c8c484db) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19735.11", 0x000000, 0x400000, CRC(8e509266) SHA1(49afc91467f08befaf34e743cbe823de3e3c9d85) ) + ROM_LOAD32_WORD("mpr-19736.12", 0x000002, 0x400000, CRC(094e0a0d) SHA1(de2c739f71e51166263446b9f6a566866ab8bee8) ) + ROM_LOAD32_WORD("mpr-19737.9", 0x800000, 0x400000, CRC(281a7dde) SHA1(71d5ba434328a81969bfdc71ac1160c5ff3ae9d3) ) + ROM_LOAD32_WORD("mpr-19738.10", 0x800002, 0x400000, CRC(f688327e) SHA1(68c9db242ef7e8f98979e968a09e4b093bc5d470) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // TGPx4 program + ROM_LOAD32_WORD("mpr-19743.29", 0x000000, 0x200000, CRC(d41a41bf) SHA1(a5f6b24e6526d0d2ef9c526c273c018d1e0fed59) ) + ROM_LOAD32_WORD("mpr-19744.30", 0x000002, 0x200000, CRC(84f203bf) SHA1(4952b764e6bf6cd735018738c5eff08781ee2315) ) + + ROM_REGION( 0x400000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19741.17", 0x000000, 0x200000, CRC(111a6e29) SHA1(8664059f157626e4bbdcf8357e3d30b37d3c25b8) ) + ROM_LOAD32_WORD("mpr-19742.21", 0x000002, 0x200000, CRC(28510aff) SHA1(3e68aec090f36a60b3b70bc90f09e2f9ce088718) ) + + ROM_REGION( 0x800000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19740.27", 0x000000, 0x400000, CRC(b20f508b) SHA1(c90fa3b42d87291ea459ccc137f3a2f3eb7efec0) ) + ROM_LOAD32_WORD("mpr-19739.25", 0x000002, 0x400000, CRC(8120cfd8) SHA1(a82744bff5dcdfae296c7c3e8c3fbfda26324e85) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("mpr-19759.31", 0x000000, 0x080000, CRC(573530f2) SHA1(7b205085965d6694f8e75e29c4028f7cb6f631ab) ) + + ROM_REGION( 0x20000, "cpu3", 0) // DSB program + ROM_LOAD16_WORD_SWAP("mpr-19760.2s", 0x000000, 0x20000, CRC(2e41ca15) SHA1(a302209bfe0f1491dff2da64b32cfaa13c3d3304) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19745.32", 0x000000, 0x400000, CRC(7082a0af) SHA1(415f9d0793a697cb1719bbd96370f4a741866527) ) + ROM_LOAD16_WORD_SWAP("mpr-19746.34", 0x400000, 0x400000, CRC(657b5977) SHA1(ca76f211d68b6b55678a4d7949bfd2ddef1b1710) ) + + ROM_REGION( 0x1000000, "mpeg", 0 ) // MPEG audio data + ROM_LOAD("mpr-19747.18s", 0x000000, 0x400000, CRC(6e895aaa) SHA1(4c67c1e1d58a3034bbd711252a78689db9f235bb) ) + ROM_LOAD("mpr-19748.20s", 0x400000, 0x400000, CRC(fcd74de3) SHA1(fd4da4cf40c4342c6263cf22eee5968292a4d2c0) ) + ROM_LOAD("mpr-19749.22s", 0x800000, 0x400000, CRC(842ca1eb) SHA1(6ee6b2eb2ea400bdb9c0a9b4a126b4b86886e813) ) + ROM_LOAD("mpr-19750.24s", 0xc00000, 0x400000, CRC(cd95d0bf) SHA1(40e2a2980c89049c339fefd48bf7aac79962cd2e) ) +ROM_END + +ROM_START( doaa ) /* Dead or Alive Revision A, Model 2A, Sega Game ID# 833-11341, ROM board ID# 834-11342, 837-12880 security board */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19310a.12", 0x000000, 0x080000, CRC(06486f7a) SHA1(b3e14103570e5f45aed16e1c158e469bc85002ae) ) + ROM_LOAD32_WORD("epr-19311a.13", 0x000002, 0x080000, CRC(1be62912) SHA1(dcc2df8e28e1a107867f74248e6ffcac83afe7c0) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19318.11", 0x0000000, 0x400000, CRC(ab431bfe) SHA1(45b5ccf67c91014daf6bf3c4bd8ec372b246e404) ) + ROM_LOAD32_WORD("mpr-19319.12", 0x0000002, 0x400000, CRC(c5cb694d) SHA1(448b45d30cc7a71395a49a2c5789989fd7b7b4e7) ) + ROM_LOAD32_WORD("mpr-19316.9", 0x0800000, 0x400000, CRC(2d2d1b1a) SHA1(77ce5d8aa98bdbc97ae08a452f584b30d8885cfc) ) + ROM_LOAD32_WORD("mpr-19317.10", 0x0800002, 0x400000, CRC(96b17bcf) SHA1(3aa9d2f8afad74b5626ce2cf2d7a86aef8cac80b) ) + ROM_LOAD32_WORD("mpr-19314.7", 0x1000000, 0x400000, CRC(a8d963fb) SHA1(6a1680d6380321279b0d701e4b47d4ae712f3b72) ) + ROM_LOAD32_WORD("mpr-19315.8", 0x1000002, 0x400000, CRC(90ae5682) SHA1(ec56df14f0847daf9bd0435f785a8946c94d2988) ) + ROM_LOAD32_WORD("mpr-19312.5", 0x1800000, 0x200000, CRC(1dcedb10) SHA1(a60fb9e7c0731004d0f0ff28c4cde272b21dd658) ) + ROM_LOAD32_WORD("mpr-19313.6", 0x1800002, 0x200000, CRC(8c63055e) SHA1(9f375b3f4a8884163ffcf364989499f2cd21e18b) ) + ROM_COPY("main_data", 0x1800000, 0x1c00000, 0x400000 ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x2000000, "polygons", ROMREGION_ERASEFF ) // Models + ROM_LOAD32_WORD("mpr-19322.17", 0x0000000, 0x400000, CRC(d0e6ecf0) SHA1(1b87f6337b4286fd738856da899462e7baa92601) ) + ROM_LOAD32_WORD("mpr-19325.21", 0x0000002, 0x400000, CRC(7cbe432d) SHA1(8b31e292160b88df9c77b36096914d09ab8b6086) ) + ROM_LOAD32_WORD("mpr-19323.18", 0x0800000, 0x400000, CRC(453d3f4a) SHA1(8c0530824bb8ecb007021ee6e93412597bb0ecd6) ) + ROM_LOAD32_WORD("mpr-19326.22", 0x0800002, 0x400000, CRC(b976da02) SHA1(a154eb128604aac9e35438d8811971133eab94a1) ) + ROM_LOAD32_WORD("mpr-19324.19", 0x1000000, 0x400000, CRC(d972201f) SHA1(1857ffc58697997ee22436586c398eb0c3daba6c) ) + ROM_LOAD32_WORD("mpr-19327.23", 0x1000002, 0x400000, CRC(6a75634c) SHA1(8ed74c7afd95fc7a4df0f01a47479b6f44e3073c) ) + + ROM_REGION( 0x800000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19321.27", 0x000000, 0x400000, CRC(9c49e845) SHA1(344839640d9814263fa5ed00c2043cd6f18d5cb2) ) + ROM_LOAD32_WORD("mpr-19320.25", 0x000002, 0x400000, CRC(190c017f) SHA1(4c3250b9abe39fc5c8fd0fcdb5fb7ea131434516) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-19328.30", 0x000000, 0x080000, CRC(400bdbfb) SHA1(54db969fa54cf3c502d77aa6a6aaeef5d7db9f04) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19329.31", 0x000000, 0x200000, CRC(8fd2708a) SHA1(7a341b15afa489aa95af70cb34ac3934b1a7d887) ) + ROM_LOAD16_WORD_SWAP("mpr-19330.32", 0x200000, 0x200000, CRC(0c69787d) SHA1(dc5870cd93da2babe5fc9c03b252fc6ea6e45721) ) + ROM_LOAD16_WORD_SWAP("mpr-19331.33", 0x400000, 0x200000, CRC(c18ea0b8) SHA1(0f42458829ae85fffcedd42cd9f728a7a3d75f1c) ) + ROM_LOAD16_WORD_SWAP("mpr-19332.34", 0x600000, 0x200000, CRC(2877f96f) SHA1(00e5677da30527b862e238f10762a5cbfbabde2b) ) + + MODEL2_CPU_BOARD + MODEL2A_VID_BOARD +ROM_END + +ROM_START( doa ) /* Dead or Alive Revision B, Model 2B, 837-12880 security board */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19379b.15", 0x000000, 0x080000, CRC(8a10a944) SHA1(c675a344f74d0118907fb5292495883c0c30c719) ) + ROM_LOAD32_WORD("epr-19380b.16", 0x000002, 0x080000, CRC(766c1ec8) SHA1(49250886f66db9fd37d88bc22c8f22046f74f043) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19318.11", 0x0000000, 0x400000, CRC(ab431bfe) SHA1(45b5ccf67c91014daf6bf3c4bd8ec372b246e404) ) + ROM_LOAD32_WORD("mpr-19319.12", 0x0000002, 0x400000, CRC(c5cb694d) SHA1(448b45d30cc7a71395a49a2c5789989fd7b7b4e7) ) + ROM_LOAD32_WORD("mpr-19316.9", 0x0800000, 0x400000, CRC(2d2d1b1a) SHA1(77ce5d8aa98bdbc97ae08a452f584b30d8885cfc) ) + ROM_LOAD32_WORD("mpr-19317.10", 0x0800002, 0x400000, CRC(96b17bcf) SHA1(3aa9d2f8afad74b5626ce2cf2d7a86aef8cac80b) ) + ROM_LOAD32_WORD("mpr-19314.7", 0x1000000, 0x400000, CRC(a8d963fb) SHA1(6a1680d6380321279b0d701e4b47d4ae712f3b72) ) + ROM_LOAD32_WORD("mpr-19315.8", 0x1000002, 0x400000, CRC(90ae5682) SHA1(ec56df14f0847daf9bd0435f785a8946c94d2988) ) + ROM_LOAD32_WORD("mpr-19312.5", 0x1800000, 0x200000, CRC(1dcedb10) SHA1(a60fb9e7c0731004d0f0ff28c4cde272b21dd658) ) + ROM_LOAD32_WORD("mpr-19313.6", 0x1800002, 0x200000, CRC(8c63055e) SHA1(9f375b3f4a8884163ffcf364989499f2cd21e18b) ) + ROM_COPY("main_data", 0x1800000, 0x1c00000, 0x400000 ) + + ROM_REGION( 0x2000000, "polygons", ROMREGION_ERASEFF ) // Models + ROM_LOAD32_WORD("mpr-19322.17", 0x0000000, 0x400000, CRC(d0e6ecf0) SHA1(1b87f6337b4286fd738856da899462e7baa92601) ) + ROM_LOAD32_WORD("mpr-19325.21", 0x0000002, 0x400000, CRC(7cbe432d) SHA1(8b31e292160b88df9c77b36096914d09ab8b6086) ) + ROM_LOAD32_WORD("mpr-19323.18", 0x0800000, 0x400000, CRC(453d3f4a) SHA1(8c0530824bb8ecb007021ee6e93412597bb0ecd6) ) + ROM_LOAD32_WORD("mpr-19326.22", 0x0800002, 0x400000, CRC(b976da02) SHA1(a154eb128604aac9e35438d8811971133eab94a1) ) + ROM_LOAD32_WORD("mpr-19324.19", 0x1000000, 0x400000, CRC(d972201f) SHA1(1857ffc58697997ee22436586c398eb0c3daba6c) ) + ROM_LOAD32_WORD("mpr-19327.23", 0x1000002, 0x400000, CRC(6a75634c) SHA1(8ed74c7afd95fc7a4df0f01a47479b6f44e3073c) ) + + ROM_REGION( 0x800000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19321.27", 0x000000, 0x400000, CRC(9c49e845) SHA1(344839640d9814263fa5ed00c2043cd6f18d5cb2) ) + ROM_LOAD32_WORD("mpr-19320.25", 0x000002, 0x400000, CRC(190c017f) SHA1(4c3250b9abe39fc5c8fd0fcdb5fb7ea131434516) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-19328.30", 0x000000, 0x080000, CRC(400bdbfb) SHA1(54db969fa54cf3c502d77aa6a6aaeef5d7db9f04) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19329.31", 0x000000, 0x200000, CRC(8fd2708a) SHA1(7a341b15afa489aa95af70cb34ac3934b1a7d887) ) + ROM_LOAD16_WORD_SWAP("mpr-19330.32", 0x200000, 0x200000, CRC(0c69787d) SHA1(dc5870cd93da2babe5fc9c03b252fc6ea6e45721) ) + ROM_LOAD16_WORD_SWAP("mpr-19331.33", 0x400000, 0x200000, CRC(c18ea0b8) SHA1(0f42458829ae85fffcedd42cd9f728a7a3d75f1c) ) + ROM_LOAD16_WORD_SWAP("mpr-19332.34", 0x600000, 0x200000, CRC(2877f96f) SHA1(00e5677da30527b862e238f10762a5cbfbabde2b) ) +ROM_END + +ROM_START( sgt24h ) /* Super GT 24h, Model 2B */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19155.15", 0x000000, 0x080000, CRC(593952fd) SHA1(1fc4afc6e3910cc8adb0688542e61a9efb442e56) ) + ROM_LOAD32_WORD("epr-19156.16", 0x000002, 0x080000, CRC(a91fc4ee) SHA1(a37611da0295f7d7e5d2411c3f9b73140d311f74) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19146.11", 0x000000, 0x400000, CRC(d66b5b0f) SHA1(c2a5b83c9041d8f46dfac4a3ff8cfdefb96d02b3) ) + ROM_LOAD32_WORD("mpr-19147.12", 0x000002, 0x400000, CRC(d5558f48) SHA1(c9f40328d6974b7767fa6ba719d0d2b7a173c210) ) + ROM_LOAD32_WORD("mpr-19148.9", 0x800000, 0x400000, CRC(a14c86db) SHA1(66cd8672c00e4e2572de7c5648de595674ffa8f8) ) + ROM_LOAD32_WORD("mpr-19149.10", 0x800002, 0x400000, CRC(94ef5849) SHA1(3e1748dc5e61c93eedbf0ca6b1946a30be722403) ) + + ROM_REGION( 0x800000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19150.17", 0x000000, 0x400000, CRC(e0ad870e) SHA1(3429d9f9434d75ddb5fa05d4b493828adfe826a4) ) + ROM_LOAD32_WORD("mpr-19151.21", 0x000002, 0x400000, CRC(e2a1b125) SHA1(cc5c2d9ab8a01f52e66969464f53ae3cefca6a09) ) + + ROM_REGION( 0x400000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19153.27", 0x000000, 0x200000, CRC(136adfd0) SHA1(70ce4e609c8b003ff04518044c18d29089e6a353) ) + ROM_LOAD32_WORD("mpr-19152.25", 0x000002, 0x200000, CRC(363769a2) SHA1(51b2f11a01fb72e151025771f8a8496993e605c2) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x20000, "cpu4", 0) // Communication program + ROM_LOAD16_WORD_SWAP("epr-18643a.7", 0x000000, 0x20000, CRC(b5e048ec) SHA1(8182e05a2ffebd590a936c1359c81e60caa79c2a) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-19157.31", 0x000000, 0x080000, CRC(8ffea0cf) SHA1(439e784081329db2fe03419681150f3216f4ccff) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19154.32", 0x000000, 0x400000, CRC(7cd9e679) SHA1(b9812c4f3042f95febc96bcdd46e3b0724ad4b4f) ) +ROM_END + +ROM_START( von ) /* Virtual On Cyber Troopers Revision B (US), Model 2B, Sega Game ID# 833-12345-01, ROM board ID# 834-12346-01 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-18828b.15", 0x000000, 0x080000, CRC(6499cc59) SHA1(8289be295f021acbf0c903513ba97ae7de50dedb) ) + ROM_LOAD32_WORD("epr-18829b.16", 0x000002, 0x080000, CRC(0053b10f) SHA1(b89cc814b02b4ab5e37c75ee1a9cf57b88b63053) ) + ROM_LOAD32_WORD("epr-18666.13", 0x100000, 0x080000, CRC(66edb432) SHA1(b67131b0158a58138380734dd5b9394b70010026) ) + ROM_LOAD32_WORD("epr-18667.14", 0x100002, 0x080000, CRC(b593d31f) SHA1(1e9f23f4052ab1b0275307cc80e51352f13bc319) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-18648.11", 0x000000, 0x400000, CRC(2edbe489) SHA1(ded2e4b295be08970d13c387818c570c3afe8109) ) + ROM_LOAD32_WORD("mpr-18649.12", 0x000002, 0x400000, CRC(e68c5aa6) SHA1(cdee1ba9247eda4282442d0522f8de7d7c86e1e6) ) + ROM_LOAD32_WORD("mpr-18650.9", 0x800000, 0x400000, CRC(89a855b9) SHA1(5096db1da1f7e175000e89fca2a1dd3fd53030ea) ) + ROM_LOAD32_WORD("mpr-18651.10", 0x800002, 0x400000, CRC(f4c23107) SHA1(f65984614111b12dd414db80751efe64fcf5ef16) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) + ROM_LOAD32_WORD("mpr-18662.29", 0x000000, 0x200000, CRC(a33d3335) SHA1(991bbe9dcbef8bfa96682e9d142623fc9b7c0879) ) + ROM_LOAD32_WORD("mpr-18663.30", 0x000002, 0x200000, CRC(ea74a641) SHA1(a684e13c0afe2ef3f3108ae9b73389121368fc4e) ) + + ROM_REGION( 0x1000000, "polygons", ROMREGION_ERASEFF ) // Models + ROM_LOAD32_WORD("mpr-18654.17", 0x000000, 0x400000, CRC(6a0caf29) SHA1(9f009f44e62ae0f9dec7a34a163bc186d1c4cbbd) ) + ROM_LOAD32_WORD("mpr-18655.21", 0x000002, 0x400000, CRC(a4293e78) SHA1(af512c994bedbdaf3a5eeed607e771dcd87810fc) ) + ROM_LOAD32_WORD("mpr-18656.18", 0x800000, 0x400000, CRC(b4f51e76) SHA1(eb71ada331576f2a7219d238ea07a61bcbf6381a) ) + ROM_LOAD32_WORD("mpr-18657.22", 0x800002, 0x400000, CRC(a9be4674) SHA1(a918c2a3de78a08104480097edfb9d6aeaeda873) ) + + ROM_REGION( 0x1000000, "textures", ROMREGION_ERASEFF ) // Textures + ROM_LOAD32_WORD("mpr-18660.27", 0x000000, 0x200000, CRC(e53663e5) SHA1(0a4908be654bad4f00d7d58f0e42f631996911c9) ) + ROM_LOAD32_WORD("mpr-18658.25", 0x000002, 0x200000, CRC(3d0fcd01) SHA1(c8626c879bfcf7abd095cac5dc03a04ae8629423) ) + ROM_LOAD32_WORD("mpr-18661.28", 0x800000, 0x200000, CRC(52b50410) SHA1(64ea7b2f86745954e0b8a15d71203444705240a2) ) + ROM_LOAD32_WORD("mpr-18659.26", 0x800002, 0x200000, CRC(27aa8ae2) SHA1(e9b756e5b4b1c19e52e47af03c773fee544be420) ) + + ROM_REGION( 0x20000, "cpu3", 0) // Communication program + ROM_LOAD16_WORD_SWAP("epr-18643a.7", 0x000000, 0x20000, CRC(b5e048ec) SHA1(8182e05a2ffebd590a936c1359c81e60caa79c2a) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-18670.31", 0x000000, 0x080000, CRC(3e715f76) SHA1(4fd997e379a8cdb94ec3b1986b3ab443fc6fa12a) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-18652.32", 0x000000, 0x400000, CRC(037eee53) SHA1(e592f9e97abe0a7bc9009d8327b93da9bc43749c)) + ROM_LOAD16_WORD_SWAP("mpr-18653.34", 0x400000, 0x400000, CRC(9ec3e7bf) SHA1(197bc8adc823e93128c1cebf69361a7c7297f808)) +ROM_END + +ROM_START( vonj ) /* Virtual On Cyber Troopers Revision B (Japan), Model 2B */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-18664b.15", 0x000000, 0x080000, CRC(27d0172c) SHA1(f3bcae9898c7d656eccb4d2546c9bb93daaefbb7) ) + ROM_LOAD32_WORD("epr-18665b.16", 0x000002, 0x080000, CRC(2f0142ee) SHA1(73f2a19a519ced8e0a1ab5cf69a4bf9d9841e288) ) + ROM_LOAD32_WORD("epr-18666.13", 0x100000, 0x080000, CRC(66edb432) SHA1(b67131b0158a58138380734dd5b9394b70010026) ) + ROM_LOAD32_WORD("epr-18667.14", 0x100002, 0x080000, CRC(b593d31f) SHA1(1e9f23f4052ab1b0275307cc80e51352f13bc319) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-18648.11", 0x000000, 0x400000, CRC(2edbe489) SHA1(ded2e4b295be08970d13c387818c570c3afe8109) ) + ROM_LOAD32_WORD("mpr-18649.12", 0x000002, 0x400000, CRC(e68c5aa6) SHA1(cdee1ba9247eda4282442d0522f8de7d7c86e1e6) ) + ROM_LOAD32_WORD("mpr-18650.9", 0x800000, 0x400000, CRC(89a855b9) SHA1(5096db1da1f7e175000e89fca2a1dd3fd53030ea) ) + ROM_LOAD32_WORD("mpr-18651.10", 0x800002, 0x400000, CRC(f4c23107) SHA1(f65984614111b12dd414db80751efe64fcf5ef16) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) + ROM_LOAD32_WORD("mpr-18662.29", 0x000000, 0x200000, CRC(a33d3335) SHA1(991bbe9dcbef8bfa96682e9d142623fc9b7c0879) ) + ROM_LOAD32_WORD("mpr-18663.30", 0x000002, 0x200000, CRC(ea74a641) SHA1(a684e13c0afe2ef3f3108ae9b73389121368fc4e) ) + + ROM_REGION( 0x1000000, "polygons", ROMREGION_ERASEFF ) // Models + ROM_LOAD32_WORD("mpr-18654.17", 0x000000, 0x400000, CRC(6a0caf29) SHA1(9f009f44e62ae0f9dec7a34a163bc186d1c4cbbd) ) + ROM_LOAD32_WORD("mpr-18655.21", 0x000002, 0x400000, CRC(a4293e78) SHA1(af512c994bedbdaf3a5eeed607e771dcd87810fc) ) + ROM_LOAD32_WORD("mpr-18656.18", 0x800000, 0x400000, CRC(b4f51e76) SHA1(eb71ada331576f2a7219d238ea07a61bcbf6381a) ) + ROM_LOAD32_WORD("mpr-18657.22", 0x800002, 0x400000, CRC(a9be4674) SHA1(a918c2a3de78a08104480097edfb9d6aeaeda873) ) + + ROM_REGION( 0x1000000, "textures", ROMREGION_ERASEFF ) // Textures + ROM_LOAD32_WORD("mpr-18660.27", 0x000000, 0x200000, CRC(e53663e5) SHA1(0a4908be654bad4f00d7d58f0e42f631996911c9) ) + ROM_LOAD32_WORD("mpr-18658.25", 0x000002, 0x200000, CRC(3d0fcd01) SHA1(c8626c879bfcf7abd095cac5dc03a04ae8629423) ) + ROM_LOAD32_WORD("mpr-18661.28", 0x800000, 0x200000, CRC(52b50410) SHA1(64ea7b2f86745954e0b8a15d71203444705240a2) ) + ROM_LOAD32_WORD("mpr-18659.26", 0x800002, 0x200000, CRC(27aa8ae2) SHA1(e9b756e5b4b1c19e52e47af03c773fee544be420) ) + + ROM_REGION( 0x20000, "cpu3", 0) // Communication program + ROM_LOAD16_WORD_SWAP("epr-18643a.7", 0x000000, 0x20000, CRC(b5e048ec) SHA1(8182e05a2ffebd590a936c1359c81e60caa79c2a) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-18670.31", 0x000000, 0x080000, CRC(3e715f76) SHA1(4fd997e379a8cdb94ec3b1986b3ab443fc6fa12a) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-18652.32", 0x000000, 0x400000, CRC(037eee53) SHA1(e592f9e97abe0a7bc9009d8327b93da9bc43749c) ) + ROM_LOAD16_WORD_SWAP("mpr-18653.34", 0x400000, 0x400000, CRC(9ec3e7bf) SHA1(197bc8adc823e93128c1cebf69361a7c7297f808) ) +ROM_END + +ROM_START( vonr ) /* Virtual On Cyber Troopers Relay (Japan) */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-18671.15", 0x000000, 0x080000, CRC(fdc01c6b) SHA1(27f10bf02f31688009041b7c85a9527408adcb59) ) + ROM_LOAD32_WORD("epr-18672.16", 0x000002, 0x080000, CRC(98961f34) SHA1(1bfd4dcf6789ae16832e2993ee08df942a8ed433) ) + ROM_LOAD32_WORD("epr-18666.13", 0x100000, 0x080000, CRC(66edb432) SHA1(b67131b0158a58138380734dd5b9394b70010026) ) + ROM_LOAD32_WORD("epr-18667.14", 0x100002, 0x080000, CRC(b593d31f) SHA1(1e9f23f4052ab1b0275307cc80e51352f13bc319) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-18648.11", 0x000000, 0x400000, CRC(2edbe489) SHA1(ded2e4b295be08970d13c387818c570c3afe8109) ) + ROM_LOAD32_WORD("mpr-18649.12", 0x000002, 0x400000, CRC(e68c5aa6) SHA1(cdee1ba9247eda4282442d0522f8de7d7c86e1e6) ) + ROM_LOAD32_WORD("mpr-18650.9", 0x800000, 0x400000, CRC(89a855b9) SHA1(5096db1da1f7e175000e89fca2a1dd3fd53030ea) ) + ROM_LOAD32_WORD("mpr-18651.10", 0x800002, 0x400000, CRC(f4c23107) SHA1(f65984614111b12dd414db80751efe64fcf5ef16) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) + ROM_LOAD32_WORD("mpr-18662.29", 0x000000, 0x200000, CRC(a33d3335) SHA1(991bbe9dcbef8bfa96682e9d142623fc9b7c0879) ) + ROM_LOAD32_WORD("mpr-18663.30", 0x000002, 0x200000, CRC(ea74a641) SHA1(a684e13c0afe2ef3f3108ae9b73389121368fc4e) ) + + ROM_REGION( 0x1000000, "polygons", ROMREGION_ERASEFF ) // Models + ROM_LOAD32_WORD("mpr-18654.17", 0x000000, 0x400000, CRC(6a0caf29) SHA1(9f009f44e62ae0f9dec7a34a163bc186d1c4cbbd) ) + ROM_LOAD32_WORD("mpr-18655.21", 0x000002, 0x400000, CRC(a4293e78) SHA1(af512c994bedbdaf3a5eeed607e771dcd87810fc) ) + ROM_LOAD32_WORD("mpr-18656.18", 0x800000, 0x400000, CRC(b4f51e76) SHA1(eb71ada331576f2a7219d238ea07a61bcbf6381a) ) + ROM_LOAD32_WORD("mpr-18657.22", 0x800002, 0x400000, CRC(a9be4674) SHA1(a918c2a3de78a08104480097edfb9d6aeaeda873) ) + + ROM_REGION( 0x1000000, "textures", ROMREGION_ERASEFF ) // Textures + ROM_LOAD32_WORD("mpr-18660.27", 0x000000, 0x200000, CRC(e53663e5) SHA1(0a4908be654bad4f00d7d58f0e42f631996911c9) ) + ROM_LOAD32_WORD("mpr-18658.25", 0x000002, 0x200000, CRC(3d0fcd01) SHA1(c8626c879bfcf7abd095cac5dc03a04ae8629423) ) + ROM_LOAD32_WORD("mpr-18661.28", 0x800000, 0x200000, CRC(52b50410) SHA1(64ea7b2f86745954e0b8a15d71203444705240a2) ) + ROM_LOAD32_WORD("mpr-18659.26", 0x800002, 0x200000, CRC(27aa8ae2) SHA1(e9b756e5b4b1c19e52e47af03c773fee544be420) ) + + ROM_REGION( 0x20000, "cpu3", 0) // Communication program + ROM_LOAD16_WORD_SWAP("epr-18643a.7", 0x000000, 0x20000, CRC(b5e048ec) SHA1(8182e05a2ffebd590a936c1359c81e60caa79c2a) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-18670.31", 0x000000, 0x080000, CRC(3e715f76) SHA1(4fd997e379a8cdb94ec3b1986b3ab443fc6fa12a) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-18652.32", 0x000000, 0x400000, CRC(037eee53) SHA1(e592f9e97abe0a7bc9009d8327b93da9bc43749c)) + ROM_LOAD16_WORD_SWAP("mpr-18653.34", 0x400000, 0x400000, CRC(9ec3e7bf) SHA1(197bc8adc823e93128c1cebf69361a7c7297f808)) +ROM_END + +ROM_START( vstriker ) /* Virtua Striker Revision A, Model 2B, ROM board ID# 834-11904 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-18068a.15", 0x000000, 0x020000, CRC(afc69b54) SHA1(2127bde1de3cd6663c31cf2126847815234e09a4) ) + ROM_LOAD32_WORD("epr-18069a.16", 0x000002, 0x020000, CRC(0243250c) SHA1(3cbeac09d503a19c5950cf70e3b329f791acfa13) ) + ROM_LOAD32_WORD("epr-18066a.13", 0x040000, 0x020000, CRC(e658b33a) SHA1(33266e6372e73f670688f58e51081ec5a7deec11) ) + ROM_LOAD32_WORD("epr-18067a.14", 0x040002, 0x020000, CRC(49e94047) SHA1(56c8d1a365985886dffeddf24d692ce6b377760a) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-18055.11", 0x000000, 0x200000, CRC(5aba9fc0) SHA1(40d45af7e58fa48b6afa85071c2bd1d4b5b5ffa5) ) + ROM_LOAD32_WORD("mpr-18056.12", 0x000002, 0x200000, CRC(017f0c55) SHA1(744e5a02abd82fbeb875c5cd30c5543570140cff) ) + ROM_LOAD32_WORD("mpr-18053.9", 0x400000, 0x200000, CRC(46c770c8) SHA1(000e9edfed49cc3dcc136f80e044dcd2b42378ce) ) + ROM_LOAD32_WORD("mpr-18054.10", 0x400002, 0x200000, CRC(437af66e) SHA1(c5afa62100a93e160aa96b327a260cc7fee51fdc) ) + ROM_LOAD32_WORD("epr-18070a.7", 0x800000, 0x080000, CRC(1961e2fc) SHA1(12ead9b782e092346b7cd5a7343b302f546fe066) ) + ROM_LOAD32_WORD("epr-18071a.8", 0x800002, 0x080000, CRC(b2492dca) SHA1(3b35522ab8e1fdfa327245fef797e3d7c0cceb85) ) + + ROM_REGION( 0x800000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-18057.17", 0x000000, 0x200000, CRC(890d8806) SHA1(fe73e4ea310e13b172e49d39c7eafba8f9052e67) ) + ROM_LOAD32_WORD("mpr-18059.21", 0x000002, 0x200000, CRC(c5cdf534) SHA1(fd127d33bc5a78b81aaa7d5886beca2192a62867) ) + ROM_LOAD32_WORD("mpr-18058.18", 0x400000, 0x200000, CRC(d4cbdf7c) SHA1(fe783c5bc94c2581fd990f0f0a705bdc5c05a386) ) + ROM_LOAD32_WORD("mpr-18060.22", 0x400002, 0x200000, CRC(93d5c95f) SHA1(bca83f024d85c97ca59fae8d9097fc510ec0fc7f) ) + + ROM_REGION( 0x400000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-18062.27", 0x000000, 0x200000, CRC(126e7de3) SHA1(0810364934dee8d5035cef623d01dfbacc64bf2b) ) + ROM_LOAD32_WORD("mpr-18061.25", 0x000002, 0x200000, CRC(c37f1c67) SHA1(c917046c2d98af17c59ceb0ea4f89d215cc0ead8) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-18072.31", 0x000000, 0x020000, CRC(73eabb58) SHA1(4f6d70d6e0d7b469c5f2527efb08f208f4aa017e) ) + + ROM_REGION16_BE( 0x600000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-18063.32", 0x000000, 0x200000, CRC(b74d7c8a) SHA1(da0bc8b3822b01087b6f9de0446cab1eb6617e8e) ) + ROM_LOAD16_WORD_SWAP("mpr-18064.33", 0x200000, 0x200000, CRC(783b9910) SHA1(108b23bb57e3133c555083aa4f9bc573ac6e3152) ) + ROM_LOAD16_WORD_SWAP("mpr-18065.34", 0x400000, 0x200000, CRC(046b55fe) SHA1(2db7eabf4318881a67b10dba24f6f0cd68940ace) ) +ROM_END + +ROM_START( vstrikero ) /* Virtua Striker, Model 2B, ROM board ID# 834-11904 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-18068.15", 0x000000, 0x020000, CRC(74a47795) SHA1(3ba34bd467e11e768eda95ff345f5993fb9d6bca) ) + ROM_LOAD32_WORD("epr-18069.16", 0x000002, 0x020000, CRC(f6c3fcbf) SHA1(84bf16fc2a441cb724f4bc635a4c4209c240cfbf) ) + ROM_LOAD32_WORD("epr-18066.13", 0x040000, 0x020000, CRC(e774229e) SHA1(0ff20aa3e030df869767bb9614565acc9f3fe3b1) ) + ROM_LOAD32_WORD("epr-18067.14", 0x040002, 0x020000, CRC(7dfd950c) SHA1(d5eff8aff37fb0ef3c7f9d8bfca8460213b0f0a7) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-18055.11", 0x000000, 0x200000, CRC(5aba9fc0) SHA1(40d45af7e58fa48b6afa85071c2bd1d4b5b5ffa5) ) + ROM_LOAD32_WORD("mpr-18056.12", 0x000002, 0x200000, CRC(017f0c55) SHA1(744e5a02abd82fbeb875c5cd30c5543570140cff) ) + ROM_LOAD32_WORD("mpr-18053.9", 0x400000, 0x200000, CRC(46c770c8) SHA1(000e9edfed49cc3dcc136f80e044dcd2b42378ce) ) + ROM_LOAD32_WORD("mpr-18054.10", 0x400002, 0x200000, CRC(437af66e) SHA1(c5afa62100a93e160aa96b327a260cc7fee51fdc) ) + ROM_LOAD32_WORD("epr-18070.7", 0x800000, 0x080000, CRC(f52e4db5) SHA1(731452284c45329701258ee9fb8b7df6514fbba1) ) + ROM_LOAD32_WORD("epr-18071.8", 0x800002, 0x080000, CRC(1be63a7d) SHA1(c678f1f42de86cc968c3f823994d36c74b2e55fd) ) + + ROM_REGION( 0x800000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-18057.17", 0x000000, 0x200000, CRC(890d8806) SHA1(fe73e4ea310e13b172e49d39c7eafba8f9052e67) ) + ROM_LOAD32_WORD("mpr-18059.21", 0x000002, 0x200000, CRC(c5cdf534) SHA1(fd127d33bc5a78b81aaa7d5886beca2192a62867) ) + ROM_LOAD32_WORD("mpr-18058.18", 0x400000, 0x200000, CRC(d4cbdf7c) SHA1(fe783c5bc94c2581fd990f0f0a705bdc5c05a386) ) + ROM_LOAD32_WORD("mpr-18060.22", 0x400002, 0x200000, CRC(93d5c95f) SHA1(bca83f024d85c97ca59fae8d9097fc510ec0fc7f) ) + + ROM_REGION( 0x400000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-18062.27", 0x000000, 0x200000, CRC(126e7de3) SHA1(0810364934dee8d5035cef623d01dfbacc64bf2b) ) + ROM_LOAD32_WORD("mpr-18061.25", 0x000002, 0x200000, CRC(c37f1c67) SHA1(c917046c2d98af17c59ceb0ea4f89d215cc0ead8) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-18072.31", 0x000000, 0x020000, CRC(73eabb58) SHA1(4f6d70d6e0d7b469c5f2527efb08f208f4aa017e) ) + + ROM_REGION16_BE( 0x600000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-18063.32", 0x000000, 0x200000, CRC(b74d7c8a) SHA1(da0bc8b3822b01087b6f9de0446cab1eb6617e8e) ) + ROM_LOAD16_WORD_SWAP("mpr-18064.33", 0x200000, 0x200000, CRC(783b9910) SHA1(108b23bb57e3133c555083aa4f9bc573ac6e3152) ) + ROM_LOAD16_WORD_SWAP("mpr-18065.34", 0x400000, 0x200000, CRC(046b55fe) SHA1(2db7eabf4318881a67b10dba24f6f0cd68940ace) ) +ROM_END + +ROM_START( dynabb ) /* Dynamite Baseball, Model 2B. Sega game ID# 833-12803 DYNAMITE BASEBALL */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19170.15", 0x000000, 0x080000, CRC(e00eb49e) SHA1(20975d892cf1c9f50605238d6ab41d79ece39f69) ) + ROM_LOAD32_WORD("epr-19171.16", 0x000002, 0x080000, CRC(9878d67d) SHA1(d3350546b7e0e6fe8bb2f9d1a91475655f931b8b) ) + ROM_LOAD32_WORD("epr-19168.13", 0x100000, 0x080000, CRC(041da66b) SHA1(4a58153baf5f0b34e054bf23e519edcf364a9336) ) + ROM_LOAD32_WORD("epr-19169.14", 0x100002, 0x080000, CRC(91a5acef) SHA1(2520a3e4ff15e4d583861ba656570abca5f7c611) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + // IC11, IC12 not populated + ROM_LOAD32_WORD("mpr-19176.9", 0x0800000, 0x400000, CRC(2c4e90f5) SHA1(8d5ed0b26e79dd6476282bc69cb27b42381635f2) ) + ROM_LOAD32_WORD("mpr-19177.10", 0x0800002, 0x400000, CRC(b0f1e512) SHA1(81e4124ac7766c7ea6bac7e7f4db110783394ae3) ) + ROM_LOAD32_WORD("mpr-19174.7", 0x1000000, 0x400000, CRC(057e5200) SHA1(dd07eb438d91a8132789154a633fb6ec4e2ef0d1) ) + ROM_LOAD32_WORD("mpr-19175.8", 0x1000002, 0x400000, CRC(85254156) SHA1(aae9531980d1b394d86e285c00c7384601875470) ) + ROM_LOAD32_WORD("mpr-19172.5", 0x1800000, 0x400000, CRC(9214aaaf) SHA1(769ad943ca90f0f3cc81f00e7a8cca95c660d266) ) + ROM_LOAD32_WORD("mpr-19173.6", 0x1800002, 0x400000, CRC(31adbeed) SHA1(3984be892f0dce21c8d423dda055ef7e57df4d4e) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19178.17", 0x0000000, 0x400000, CRC(0d621e21) SHA1(31adc229258a5d468ff80d789c59bd8a6777f900) ) + ROM_LOAD32_WORD("mpr-19180.21", 0x0000002, 0x400000, CRC(d2e311a5) SHA1(83fb31c6ad7c32f1a7bcf870edb2719653c3db97) ) + ROM_LOAD32_WORD("mpr-19179.18", 0x0800000, 0x400000, CRC(337a4ec2) SHA1(77d7d186344715237895ac1ed0ab219fcc340a7e) ) + ROM_LOAD32_WORD("mpr-19181.22", 0x0800002, 0x400000, CRC(09a86c33) SHA1(30601c5b00fa3c9db815f60a0de16576e34b8c42) ) + + + ROM_REGION( 0x800000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19183.27", 0x000000, 0x400000, CRC(5e29074b) SHA1(f4dfa396653aeb649ec170c9584ea1a74377929a) ) + ROM_LOAD32_WORD("mpr-19182.25", 0x000002, 0x400000, CRC(c899923d) SHA1(15cc86c885329227d3c19e9837363eaf6c38829b) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-19184.31", 0x000000, 0x080000, CRC(c013a163) SHA1(c564df8295e3c19082ead0eb22478dc651e0b430) ) + + ROM_REGION16_BE( 0x600000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19185.32", 0x000000, 0x200000, CRC(5175b7d8) SHA1(bed43db286703e95cc8025013b2d129598faab3c) ) + ROM_LOAD16_WORD_SWAP("mpr-19186.33", 0x200000, 0x200000, CRC(f23440b5) SHA1(9bb862d61ed079cb3eb0bd7a37b19c6134859b99) ) + ROM_LOAD16_WORD_SWAP("mpr-19187.34", 0x400000, 0x200000, CRC(20918769) SHA1(90951bd61654d39537c54325b6e157a019edcda8) ) +ROM_END + +ROM_START( dynabb97 ) /* Dynamite Baseball 97 Revision A, Model 2B */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19833a.15", 0x000000, 0x080000, CRC(d99ed1b2) SHA1(b04613d564c04c35feafccad56ed85810d894185) ) + ROM_LOAD32_WORD("epr-19834a.16", 0x000002, 0x080000, CRC(24192bb1) SHA1(c535ab4b38ffd42f03eed6a5a1706e867eaccd67) ) + ROM_LOAD32_WORD("epr-19831a.13", 0x100000, 0x080000, CRC(0527ea40) SHA1(8e80e2627aafe395d8ced4a97ba50cd9a781fb45) ) + ROM_LOAD32_WORD("epr-19832a.14", 0x100002, 0x080000, CRC(2f380a40) SHA1(d770dfd70aa14dcc716aa47e6cbf26f32649f294) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-19841.11", 0x0000000, 0x400000, CRC(989309af) SHA1(d527f46865d00a91d5b38a93dc38baf62f372cb1) ) + ROM_LOAD32_WORD("mpr-19842.12", 0x0000002, 0x400000, CRC(eec54070) SHA1(29ed4a005b52f6e16492998183ec4e5f7475022b) ) + ROM_LOAD32_WORD("mpr-19839.9", 0x0800000, 0x400000, CRC(d5a74cf4) SHA1(ddea9cfc0a14461448acae2eed2092829ef3b418) ) + ROM_LOAD32_WORD("mpr-19840.10", 0x0800002, 0x400000, CRC(45704e95) SHA1(2a325ee39f9d719399040ed2a41123bcf0c6f385) ) + ROM_LOAD32_WORD("mpr-19837.7", 0x1000000, 0x400000, CRC(c02187d9) SHA1(1da108a2ec00e3fc472b1a819655aff8c679051d) ) + ROM_LOAD32_WORD("mpr-19838.8", 0x1000002, 0x400000, CRC(546b61cd) SHA1(0cc0edd0a9c288143168d63a7d48d0fbfa64d8bf) ) + ROM_LOAD32_WORD("mpr-19835.5", 0x1800000, 0x400000, CRC(a3b0a37c) SHA1(dcde1946008ab86c7fca212ec57c1cc468f30c58) ) + ROM_LOAD32_WORD("mpr-19836.6", 0x1800002, 0x400000, CRC(d70a32aa) SHA1(fd56bb284eb66e6c078b386a0db1c2b10dc1dd4a) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-19843.17", 0x000000, 0x400000, CRC(019bc583) SHA1(8889a9438d8f3ea50058372ad03ebd4653f23313) ) + ROM_LOAD32_WORD("mpr-19845.21", 0x000002, 0x400000, CRC(2d23e73a) SHA1(63e5859518172f88a5ba98b69309d4162c233cf0) ) + ROM_LOAD32_WORD("mpr-19844.18", 0x800000, 0x400000, CRC(150198d6) SHA1(3ea5c3e41eb95e715860619f771bc580c91b095f) ) + ROM_LOAD32_WORD("mpr-19846.22", 0x800002, 0x400000, CRC(fe53cd17) SHA1(58eab07976972917c345a8d3a50ff1e96e5fa798) ) + + ROM_REGION( 0x800000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-19848.27", 0x000000, 0x400000, CRC(4c0526b7) SHA1(e8db7125be8a052e41a00c69cc08ca0d75b3b96f) ) + ROM_LOAD32_WORD("mpr-19847.25", 0x000002, 0x400000, CRC(fe55edbd) SHA1(b0b6135b23349d7d6ae007002d8df83748cab7b1) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-19849.31", 0x000000, 0x080000, CRC(b0d5bff0) SHA1(1fb824adaf3ed330a8039be726a87eb85c00abd7) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-19850.32", 0x000000, 0x200000, CRC(e1fd27bf) SHA1(a7189ad398138a91f96b192cb7c112c0301dcda4) ) + ROM_LOAD16_WORD_SWAP("mpr-19851.33", 0x200000, 0x200000, CRC(dc644077) SHA1(8765bdb1d471dbeea065a97ae131f2d8f78aa13d) ) + ROM_LOAD16_WORD_SWAP("mpr-19852.34", 0x400000, 0x200000, CRC(cfda4efd) SHA1(14d55f127da6673c538c2ef9be34a4e02ca449f3) ) + ROM_LOAD16_WORD_SWAP("mpr-19853.35", 0x600000, 0x200000, CRC(cfc64857) SHA1(cf51fafb3d45bf799b9ccb407bee862e15c95981) ) +ROM_END + +ROM_START( fvipers ) /* Fighting Vipers Revision D, Model 2B, Sega Game ID# 833-12359 REV.D FIGHTING VIPERS, ROM board ID# 834-12360 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-18606d.15", 0x000000, 0x020000, CRC(7334de7d) SHA1(d10355198a3f62b503701f44dc49bfe018c787d1) ) + ROM_LOAD32_WORD("epr-18607d.16", 0x000002, 0x020000, CRC(700d2ade) SHA1(656e25a6389f04f7fb9099f0b41fb03fa645a2f0) ) + ROM_LOAD32_WORD("epr-18604d.13", 0x040000, 0x020000, CRC(704fdfcf) SHA1(52b6ae90231d40a3ece133debaeb210fc36c6fcb) ) + ROM_LOAD32_WORD("epr-18605d.14", 0x040002, 0x020000, CRC(7dddf81f) SHA1(3e0da0eaf1f98dbbd4ca5f78c04052b347b234b2) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-18614.11", 0x0000000, 0x400000, CRC(0ebc899f) SHA1(49c80b11b207cba4ec10fbb7cc140f3a5b039e82) ) + ROM_LOAD32_WORD("mpr-18615.12", 0x0000002, 0x400000, CRC(018abdb7) SHA1(59e5b6378404e10ace4f3675428d61d3ae9d1963) ) + ROM_LOAD32_WORD("mpr-18612.9", 0x0800000, 0x400000, CRC(1f174cd1) SHA1(89b56dd2f350edd093dc06f4cc258652c26b1d45) ) + ROM_LOAD32_WORD("mpr-18613.10", 0x0800002, 0x400000, CRC(f057cdf2) SHA1(e16d5de2a00670aba4fbe0dc88ccf317de9842be) ) + ROM_LOAD32_WORD("epr-18610d.7", 0x1000000, 0x080000, CRC(a1871703) SHA1(8d7b362a8fd9d63f5cea2f3fab97e5fe3fa30d87) ) + ROM_LOAD32_WORD("epr-18611d.8", 0x1000002, 0x080000, CRC(39a75fee) SHA1(c962805f03e2503dd1671ba3e906c6e306a92e48) ) + ROM_COPY( "main_data", 0x1000000, 0x1100000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1200000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1300000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1400000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1500000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1600000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1700000, 0x100000 ) + ROM_LOAD32_WORD("epr-18608d.5", 0x1800000, 0x080000, CRC(5bc11881) SHA1(97ce5faf9719cb02dd3a15d47245cc4634f08fcb) ) + ROM_LOAD32_WORD("epr-18609d.6", 0x1800002, 0x080000, CRC(cd426035) SHA1(94c85a656c86bc4880db6bff2ef795ec30f62f39) ) + ROM_COPY( "main_data", 0x1800000, 0x1900000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1a00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1b00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1c00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1d00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1e00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1f00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) + ROM_LOAD32_WORD("mpr-18622.29", 0x000000, 0x200000, CRC(c74d99e3) SHA1(9914be9925b86af6af670745b5eba3a9e4f24af9) ) + ROM_LOAD32_WORD("mpr-18623.30", 0x000002, 0x200000, CRC(746ae931) SHA1(a6f0f589ad174a34493ee24dc0cb509ead3aed70) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-18616.17", 0x000000, 0x200000, CRC(15a239be) SHA1(1a33c48f99eed20da4b622219d21ec5995acc9aa) ) + ROM_LOAD32_WORD("mpr-18619.21", 0x000002, 0x200000, CRC(9d5e8e2b) SHA1(f79ae0a7b966ddb0948b464d233845d4f362a2e7) ) + ROM_LOAD32_WORD("mpr-18617.18", 0x400000, 0x200000, CRC(a62cab7d) SHA1(f20a545148f2a1d6f4f1c897f1ed82ad17429dce) ) + ROM_LOAD32_WORD("mpr-18620.22", 0x400002, 0x200000, CRC(4d432afd) SHA1(30a1ef1e309a163b2d8756810fc33debf069141c) ) + ROM_LOAD32_WORD("mpr-18618.19", 0x800000, 0x200000, CRC(adab589f) SHA1(67818ec4185da17f1549fb3a125cade267a46a48) ) + ROM_LOAD32_WORD("mpr-18621.23", 0x800002, 0x200000, CRC(f5eeaa95) SHA1(38d7019afcef6dbe292354d717fd49da511cbc2b) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-18626.27", 0x000000, 0x200000, CRC(9df0a961) SHA1(d8fb4bbbdc00303330047be380a79da7838d4fd5) ) + ROM_LOAD32_WORD("mpr-18624.25", 0x000002, 0x200000, CRC(1d74433e) SHA1(5b6d2d17609ae741546d99d40f575bb24d62b5d3) ) + ROM_LOAD32_WORD("mpr-18627.28", 0x800000, 0x200000, CRC(946175a0) SHA1(8b6e5e1342f98c9c6f2f7d61e843275d244f331a) ) + ROM_LOAD32_WORD("mpr-18625.26", 0x800002, 0x200000, CRC(182fd572) SHA1(b09a682eff7e835ff8c33aaece12f3727a91dd5e) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-18628.31", 0x000000, 0x080000, CRC(aa7dd79f) SHA1(d8bd1485273652d7c2a303bbdcdf607d3b530283) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-18629.32", 0x000000, 0x200000, CRC(5d0006cc) SHA1(f6d2552ffc5473836aafb06735b62f65ef8f5ef5) ) + ROM_LOAD16_WORD_SWAP("mpr-18630.33", 0x200000, 0x200000, CRC(9d405615) SHA1(7e7ffbb4ec080a0815c6ca49b9d8efe1f676203b) ) + ROM_LOAD16_WORD_SWAP("mpr-18631.34", 0x400000, 0x200000, CRC(9dae5b45) SHA1(055ac989eafb81749326520d0be264f7a984c627) ) + ROM_LOAD16_WORD_SWAP("mpr-18632.35", 0x600000, 0x200000, CRC(39da6805) SHA1(9e9523b7c2bc50f869d062f80955da1281951299) ) +ROM_END + +ROM_START( fvipersb ) /* Fighting Vipers Revision B, Model 2B, Sega Game ID# 833-12359 FIGHTING VIPERS, ROM board ID# 834-12360 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-18606b.15", 0x000000, 0x020000, CRC(3b6d1697) SHA1(569ea2ed5c3431207854d260c8ed5266d8d39595) ) + ROM_LOAD32_WORD("epr-18607b.16", 0x000002, 0x020000, CRC(2e6c2d91) SHA1(226ea4cca475f708e42591b57eb0a996c214ab29) ) + ROM_LOAD32_WORD("epr-18604b.13", 0x040000, 0x020000, CRC(e4af1048) SHA1(c682354c01a50b5e62a4f1b79fd7dfb5314a020a) ) + ROM_LOAD32_WORD("epr-18605b.14", 0x040002, 0x020000, CRC(78a6668f) SHA1(f73cb61aaa3fd4092d335676b64e8f08141a0223) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-18614.11", 0x0000000, 0x400000, CRC(0ebc899f) SHA1(49c80b11b207cba4ec10fbb7cc140f3a5b039e82) ) + ROM_LOAD32_WORD("mpr-18615.12", 0x0000002, 0x400000, CRC(018abdb7) SHA1(59e5b6378404e10ace4f3675428d61d3ae9d1963) ) + ROM_LOAD32_WORD("mpr-18612.9", 0x0800000, 0x400000, CRC(1f174cd1) SHA1(89b56dd2f350edd093dc06f4cc258652c26b1d45) ) + ROM_LOAD32_WORD("mpr-18613.10", 0x0800002, 0x400000, CRC(f057cdf2) SHA1(e16d5de2a00670aba4fbe0dc88ccf317de9842be) ) + ROM_LOAD32_WORD("epr-18610b.7", 0x1000000, 0x080000, CRC(5f227d7c) SHA1(89091b3a23d6557fb65add2fd7f6b7fb58fb1db5) ) + ROM_LOAD32_WORD("epr-18611b.8", 0x1000002, 0x080000, CRC(39a75fee) SHA1(c962805f03e2503dd1671ba3e906c6e306a92e48) ) + ROM_COPY( "main_data", 0x1000000, 0x1100000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1200000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1300000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1400000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1500000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1600000, 0x100000 ) + ROM_COPY( "main_data", 0x1000000, 0x1700000, 0x100000 ) + ROM_LOAD32_WORD("epr-18608b.5", 0x1800000, 0x080000, CRC(7df5082f) SHA1(04dd08c115bbf045610fd58f6a2c911425921c6d) ) + ROM_LOAD32_WORD("epr-18609b.6", 0x1800002, 0x080000, CRC(e771fec9) SHA1(2e996f27730780d38b4446ed70864645f7f9386f) ) + ROM_COPY( "main_data", 0x1800000, 0x1900000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1a00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1b00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1c00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1d00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1e00000, 0x100000 ) + ROM_COPY( "main_data", 0x1800000, 0x1f00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) + ROM_LOAD32_WORD("mpr-18622.29", 0x000000, 0x200000, CRC(c74d99e3) SHA1(9914be9925b86af6af670745b5eba3a9e4f24af9) ) + ROM_LOAD32_WORD("mpr-18623.30", 0x000002, 0x200000, CRC(746ae931) SHA1(a6f0f589ad174a34493ee24dc0cb509ead3aed70) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-18616.17", 0x000000, 0x200000, CRC(15a239be) SHA1(1a33c48f99eed20da4b622219d21ec5995acc9aa) ) + ROM_LOAD32_WORD("mpr-18619.21", 0x000002, 0x200000, CRC(9d5e8e2b) SHA1(f79ae0a7b966ddb0948b464d233845d4f362a2e7) ) + ROM_LOAD32_WORD("mpr-18617.18", 0x400000, 0x200000, CRC(a62cab7d) SHA1(f20a545148f2a1d6f4f1c897f1ed82ad17429dce) ) + ROM_LOAD32_WORD("mpr-18620.22", 0x400002, 0x200000, CRC(4d432afd) SHA1(30a1ef1e309a163b2d8756810fc33debf069141c) ) + ROM_LOAD32_WORD("mpr-18618.19", 0x800000, 0x200000, CRC(adab589f) SHA1(67818ec4185da17f1549fb3a125cade267a46a48) ) + ROM_LOAD32_WORD("mpr-18621.23", 0x800002, 0x200000, CRC(f5eeaa95) SHA1(38d7019afcef6dbe292354d717fd49da511cbc2b) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-18626.27", 0x000000, 0x200000, CRC(9df0a961) SHA1(d8fb4bbbdc00303330047be380a79da7838d4fd5) ) + ROM_LOAD32_WORD("mpr-18624.25", 0x000002, 0x200000, CRC(1d74433e) SHA1(5b6d2d17609ae741546d99d40f575bb24d62b5d3) ) + ROM_LOAD32_WORD("mpr-18627.28", 0x800000, 0x200000, CRC(946175a0) SHA1(8b6e5e1342f98c9c6f2f7d61e843275d244f331a) ) + ROM_LOAD32_WORD("mpr-18625.26", 0x800002, 0x200000, CRC(182fd572) SHA1(b09a682eff7e835ff8c33aaece12f3727a91dd5e) ) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-18628.31", 0x000000, 0x080000, CRC(aa7dd79f) SHA1(d8bd1485273652d7c2a303bbdcdf607d3b530283) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("mpr-18629.32", 0x000000, 0x200000, CRC(5d0006cc) SHA1(f6d2552ffc5473836aafb06735b62f65ef8f5ef5) ) + ROM_LOAD16_WORD_SWAP("mpr-18630.33", 0x200000, 0x200000, CRC(9d405615) SHA1(7e7ffbb4ec080a0815c6ca49b9d8efe1f676203b) ) + ROM_LOAD16_WORD_SWAP("mpr-18631.34", 0x400000, 0x200000, CRC(9dae5b45) SHA1(055ac989eafb81749326520d0be264f7a984c627) ) + ROM_LOAD16_WORD_SWAP("mpr-18632.35", 0x600000, 0x200000, CRC(39da6805) SHA1(9e9523b7c2bc50f869d062f80955da1281951299) ) +ROM_END + +ROM_START( daytona ) /* Daytona USA (Japan, Revision A), Original Model 2 w/Model 1 sound board */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-16722a.12", 0x000000, 0x020000, CRC(48b94318) SHA1(a476a9a3531beef760c88c9634ed4a7d270e8ee7) ) + ROM_LOAD32_WORD("epr-16723a.13", 0x000002, 0x020000, CRC(8af8b32d) SHA1(2039ec1f8da524176fcf85473c10a8b6e49e139a) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-16528.10", 0x000000, 0x200000, CRC(9ce591f6) SHA1(e22fc8a70b533f7a6191f5952c581fb8f9627906) ) + ROM_LOAD32_WORD("mpr-16529.11", 0x000002, 0x200000, CRC(f7095eaf) SHA1(da3c922f950dd730ea348eae12aa1cb69cee9a58) ) + ROM_LOAD32_WORD("mpr-16808.8", 0x400000, 0x200000, CRC(44f1f5a0) SHA1(343866a6e2187a8ebc17f6727080f9f2f9ac9200) ) + ROM_LOAD32_WORD("mpr-16809.9", 0x400002, 0x200000, CRC(37a2dd12) SHA1(8192d8698d6bd52ee11cc28917aff5840c447627) ) + ROM_LOAD32_WORD("epr-16724a.6", 0x800000, 0x080000, CRC(469f10fd) SHA1(7fad3b8d03960e5e1f7a6cb36509238977e00fcc) ) + ROM_LOAD32_WORD("epr-16725a.7", 0x800002, 0x080000, CRC(ba0df8db) SHA1(d0c5581c56500b5266cab8e8151db24fcbdea0d7) ) + ROM_COPY( "main_data", 0x800000, 0x900000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xa00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xb00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xc00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xd00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xe00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xf00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD("mpr-16537.ic28", 0x000000, 0x200000, CRC(36b7c35a) SHA1(b32fd1d3fc8983fb5f2a7b236b665a8c9b52769f) ) + ROM_LOAD32_WORD("mpr-16536.ic29", 0x000002, 0x200000, CRC(6d6afed9) SHA1(2018468d7d849854b3d0cfbcd217317e2fc93555) ) + + ROM_REGION32_LE( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-16523.ic16", 0x000000, 0x200000, CRC(2f484d42) SHA1(0b83a3fc92b7d913a14cfb01d688c63555c17c41) ) + ROM_LOAD32_WORD("mpr-16518.ic20", 0x000002, 0x200000, CRC(df683bf7) SHA1(16afe5029591f3536b5b75d9cf50a34d0ea72c3d) ) + ROM_LOAD32_WORD("mpr-16524.ic17", 0x400000, 0x200000, CRC(34658bd7) SHA1(71b47626ffe5b26d1140afe1b830a9a2be86c88f) ) + ROM_LOAD32_WORD("mpr-16519.ic21", 0x400002, 0x200000, CRC(facd1c81) SHA1(dac8c281a5e9a6c4b60197e6676f3727264ee420) ) + ROM_LOAD32_WORD("mpr-16525.ic18", 0x800000, 0x200000, CRC(fb517521) SHA1(33f5f37ea2e09fc73eed5388b46fdf1fa9e285e6) ) + ROM_LOAD32_WORD("mpr-16520.ic22", 0x800002, 0x200000, CRC(d66bd9bd) SHA1(660171674484375a27595630e5e2d2ad76a06d1a) ) + ROM_LOAD32_WORD("mpr-16772.ic19", 0xc00000, 0x200000, CRC(770ed912) SHA1(1789f35dd403f73f8be18495a0fe4ad1e6841417) ) + ROM_LOAD32_WORD("mpr-16771.ic23", 0xc00002, 0x200000, CRC(a2205124) SHA1(257a3675e4ef6adbf61285a5daa5954223c28cb2) ) + + ROM_REGION16_LE( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-16522.25", 0x000000, 0x200000, CRC(55d39a57) SHA1(abf7b0fc0f111f90da42463d600db9fa32e95efe) ) + ROM_LOAD32_WORD("mpr-16521.24", 0x000002, 0x200000, CRC(af1934fb) SHA1(a6a21a23cd34d0de6d3e6a5c3c2687f905d0dc2a) ) + ROM_LOAD32_WORD("mpr-16770.27", 0x800000, 0x200000, CRC(f9fa7bfb) SHA1(8aa933b74d4e05dc49987238705e50b00e5dae73) ) + ROM_LOAD32_WORD("mpr-16769.26", 0x800002, 0x200000, CRC(e57429e9) SHA1(8c712ab09e61ef510741a55f29b3c4e497471372) ) + + ROM_REGION( 0x20000, "cpu3", 0) // Communication program + ROM_LOAD( "epr-16726.bin", 0x000000, 0x020000, CRC(c179b8c7) SHA1(86d3e65c77fb53b1d380b629348f4ab5b3d39228) ) + + ROM_REGION( 0xc0000, M1AUDIO_CPU_REGION, ROMREGION_BE|ROMREGION_16BIT ) /* 68K code */ + ROM_LOAD16_WORD_SWAP("epr-16720.7", 0x000000, 0x020000, CRC(8e73cffd) SHA1(9933ccc0757e8c86e0adb938d1c89210b26841ea) ) + ROM_LOAD16_WORD_SWAP("epr-16721.8", 0x020000, 0x020000, CRC(1bb3b7b7) SHA1(ee2fd1480e535fc37e9932e6fe4e31344559fc87) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM1_REGION, 0 ) // Samples + ROM_LOAD("mpr-16491.32", 0x000000, 0x200000, CRC(89920903) SHA1(06d1d55470ae99f8de0f8c88c694f34c4eb13668) ) + ROM_LOAD("mpr-16492.33", 0x200000, 0x200000, CRC(459e701b) SHA1(2054f69cecad677eb00c6a3051f5b5d90885e19b) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM2_REGION, 0 ) // Samples + ROM_LOAD("mpr-16493.4", 0x000000, 0x200000, CRC(9990db15) SHA1(ea9a8b45a07dccaae62be7cf095532ce7596a70c) ) + ROM_LOAD("mpr-16494.5", 0x200000, 0x200000, CRC(600e1d6c) SHA1(d4e246fc57a16ff562bbcbccf6a739b706f58696) ) + + MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ + + ROM_REGION( 0x10000, "drivecpu", 0 ) // 838-10646 drive board + ROM_LOAD("epr-16488a.ic12", 0x000000, 0x010000, CRC(546c5d1a) SHA1(5533301fe7e3b499e6cee12230d2c656c3c667da) ) +ROM_END + +ROM_START( daytonase ) /* Daytona USA (Japan, Revision A), Original Model 2 w/Model 1 sound board */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-17369a.12", 0x000000, 0x020000, CRC(3bc6ca62) SHA1(16e9fd25670ce4eda378df402066e3d9652210b1) ) + ROM_LOAD32_WORD("epr-17370a.13", 0x000002, 0x020000, CRC(5d1c74e4) SHA1(26eff5a07f6906e1ad20cd264ce6e25a9068ea2b) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-16528.10", 0x000000, 0x200000, CRC(9ce591f6) SHA1(e22fc8a70b533f7a6191f5952c581fb8f9627906) ) + ROM_LOAD32_WORD("mpr-16529.11", 0x000002, 0x200000, CRC(f7095eaf) SHA1(da3c922f950dd730ea348eae12aa1cb69cee9a58) ) + ROM_LOAD32_WORD("mpr-16808.8", 0x400000, 0x200000, CRC(44f1f5a0) SHA1(343866a6e2187a8ebc17f6727080f9f2f9ac9200) ) + ROM_LOAD32_WORD("mpr-16809.9", 0x400002, 0x200000, CRC(37a2dd12) SHA1(8192d8698d6bd52ee11cc28917aff5840c447627) ) + ROM_LOAD32_WORD("epr-17371.6", 0x800000, 0x080000, CRC(7478f0d2) SHA1(412d4db62436746da8d0d55ccf2016d14c05153c) ) + ROM_LOAD32_WORD("epr-17372.7", 0x800002, 0x080000, CRC(308a06a9) SHA1(0c7502c2fe5a64db7e6020457b9f8e47f2c9af0e) ) + ROM_COPY( "main_data", 0x800000, 0x900000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xa00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xb00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xc00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xd00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xe00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xf00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD("mpr-16537.ic28", 0x000000, 0x200000, CRC(36b7c35a) SHA1(b32fd1d3fc8983fb5f2a7b236b665a8c9b52769f) ) + ROM_LOAD32_WORD("mpr-16536.ic29", 0x000002, 0x200000, CRC(6d6afed9) SHA1(2018468d7d849854b3d0cfbcd217317e2fc93555) ) + + ROM_REGION32_LE( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-16523.ic16", 0x000000, 0x200000, CRC(2f484d42) SHA1(0b83a3fc92b7d913a14cfb01d688c63555c17c41) ) + ROM_LOAD32_WORD("mpr-16518.ic20", 0x000002, 0x200000, CRC(df683bf7) SHA1(16afe5029591f3536b5b75d9cf50a34d0ea72c3d) ) + ROM_LOAD32_WORD("mpr-16524.ic17", 0x400000, 0x200000, CRC(34658bd7) SHA1(71b47626ffe5b26d1140afe1b830a9a2be86c88f) ) + ROM_LOAD32_WORD("mpr-16519.ic21", 0x400002, 0x200000, CRC(facd1c81) SHA1(dac8c281a5e9a6c4b60197e6676f3727264ee420) ) + ROM_LOAD32_WORD("mpr-16525.ic18", 0x800000, 0x200000, CRC(fb517521) SHA1(33f5f37ea2e09fc73eed5388b46fdf1fa9e285e6) ) + ROM_LOAD32_WORD("mpr-16520.ic22", 0x800002, 0x200000, CRC(d66bd9bd) SHA1(660171674484375a27595630e5e2d2ad76a06d1a) ) + ROM_LOAD32_WORD("mpr-16772.ic19", 0xc00000, 0x200000, CRC(770ed912) SHA1(1789f35dd403f73f8be18495a0fe4ad1e6841417) ) + ROM_LOAD32_WORD("mpr-16771.ic23", 0xc00002, 0x200000, CRC(a2205124) SHA1(257a3675e4ef6adbf61285a5daa5954223c28cb2) ) + + ROM_REGION16_LE( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-16522.25", 0x000000, 0x200000, CRC(55d39a57) SHA1(abf7b0fc0f111f90da42463d600db9fa32e95efe) ) + ROM_LOAD32_WORD("mpr-16521.24", 0x000002, 0x200000, CRC(af1934fb) SHA1(a6a21a23cd34d0de6d3e6a5c3c2687f905d0dc2a) ) + ROM_LOAD32_WORD("mpr-16770.27", 0x800000, 0x200000, CRC(f9fa7bfb) SHA1(8aa933b74d4e05dc49987238705e50b00e5dae73) ) + ROM_LOAD32_WORD("mpr-16769.26", 0x800002, 0x200000, CRC(e57429e9) SHA1(8c712ab09e61ef510741a55f29b3c4e497471372) ) + + ROM_REGION( 0x20000, "cpu3", 0) // Communication program + ROM_LOAD( "epr-16726.bin", 0x000000, 0x020000, CRC(c179b8c7) SHA1(86d3e65c77fb53b1d380b629348f4ab5b3d39228) ) + + ROM_REGION( 0xc0000, M1AUDIO_CPU_REGION, ROMREGION_BE|ROMREGION_16BIT ) /* 68K code */ + ROM_LOAD16_WORD_SWAP("epr-16720.7", 0x000000, 0x020000, CRC(8e73cffd) SHA1(9933ccc0757e8c86e0adb938d1c89210b26841ea) ) + ROM_LOAD16_WORD_SWAP("epr-16721.8", 0x020000, 0x020000, CRC(1bb3b7b7) SHA1(ee2fd1480e535fc37e9932e6fe4e31344559fc87) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM1_REGION, 0 ) // Samples + ROM_LOAD("mpr-16491.32", 0x000000, 0x200000, CRC(89920903) SHA1(06d1d55470ae99f8de0f8c88c694f34c4eb13668) ) + ROM_LOAD("mpr-16492.33", 0x200000, 0x200000, CRC(459e701b) SHA1(2054f69cecad677eb00c6a3051f5b5d90885e19b) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM2_REGION, 0 ) // Samples + ROM_LOAD("mpr-16493.4", 0x000000, 0x200000, CRC(9990db15) SHA1(ea9a8b45a07dccaae62be7cf095532ce7596a70c) ) + ROM_LOAD("mpr-16494.5", 0x200000, 0x200000, CRC(600e1d6c) SHA1(d4e246fc57a16ff562bbcbccf6a739b706f58696) ) + + MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ + + ROM_REGION( 0x10000, "drivecpu", 0 ) // 838-10646 drive board + ROM_LOAD("epr-16488a.ic12", 0x000000, 0x010000, CRC(546c5d1a) SHA1(5533301fe7e3b499e6cee12230d2c656c3c667da) ) +ROM_END + +ROM_START( daytona93 ) /* Daytona USA, Deluxe cabinet, '93 version, ROM board ID# 834-10536-01 - There is said to be a Deluxe '94 edition */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-16530a.12", 0x000000, 0x020000, CRC(39e962b5) SHA1(b98a1faabb4f1eff707a94c32224c7820f259874) ) + ROM_LOAD32_WORD("epr-16531a.13", 0x000002, 0x020000, CRC(693126eb) SHA1(779734ba536db67e14760d52e8d8d7db07816481) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-16528.10", 0x000000, 0x200000, CRC(9ce591f6) SHA1(e22fc8a70b533f7a6191f5952c581fb8f9627906) ) + ROM_LOAD32_WORD("mpr-16529.11", 0x000002, 0x200000, CRC(f7095eaf) SHA1(da3c922f950dd730ea348eae12aa1cb69cee9a58) ) + ROM_LOAD32_WORD("mpr-16526.8", 0x400000, 0x200000, CRC(5273b8b5) SHA1(f505910394d41a9ffecfdea7b45ef25b21469b7a) ) + ROM_LOAD32_WORD("mpr-16527.9", 0x400002, 0x200000, CRC(fc4cb0ef) SHA1(1bf3aec88ef9fb40bde054f5f0b884bf715cbcc8) ) + ROM_LOAD32_WORD("epr-16534a.6", 0x800000, 0x100000, CRC(1bb0d72d) SHA1(814004e3426b5638e9c8b226594f4f2a9138ffed) ) + ROM_LOAD32_WORD("epr-16535a.7", 0x800002, 0x100000, CRC(459a8bfb) SHA1(607bc0f6c478c3d83ce81f34b7f69997361f906f) ) + ROM_COPY( "main_data", 0x900000, 0xa00000, 0x100000 ) + ROM_COPY( "main_data", 0x900000, 0xb00000, 0x100000 ) + ROM_COPY( "main_data", 0x900000, 0xc00000, 0x100000 ) + ROM_COPY( "main_data", 0x900000, 0xd00000, 0x100000 ) + ROM_COPY( "main_data", 0x900000, 0xe00000, 0x100000 ) + ROM_COPY( "main_data", 0x900000, 0xf00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD("mpr-16537.ic28", 0x000000, 0x200000, CRC(36b7c35a) SHA1(b32fd1d3fc8983fb5f2a7b236b665a8c9b52769f) ) + ROM_LOAD32_WORD("mpr-16536.ic29", 0x000002, 0x200000, CRC(6d6afed9) SHA1(2018468d7d849854b3d0cfbcd217317e2fc93555) ) + + ROM_REGION32_LE( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-16523.ic16", 0x000000, 0x200000, CRC(2f484d42) SHA1(0b83a3fc92b7d913a14cfb01d688c63555c17c41) ) + ROM_LOAD32_WORD("mpr-16518.ic20", 0x000002, 0x200000, CRC(df683bf7) SHA1(16afe5029591f3536b5b75d9cf50a34d0ea72c3d) ) + ROM_LOAD32_WORD("mpr-16524.ic17", 0x400000, 0x200000, CRC(34658bd7) SHA1(71b47626ffe5b26d1140afe1b830a9a2be86c88f) ) + ROM_LOAD32_WORD("mpr-16519.ic21", 0x400002, 0x200000, CRC(facd1c81) SHA1(dac8c281a5e9a6c4b60197e6676f3727264ee420) ) + ROM_LOAD32_WORD("mpr-16525.ic18", 0x800000, 0x200000, CRC(fb517521) SHA1(33f5f37ea2e09fc73eed5388b46fdf1fa9e285e6) ) + ROM_LOAD32_WORD("mpr-16520.ic22", 0x800002, 0x200000, CRC(d66bd9bd) SHA1(660171674484375a27595630e5e2d2ad76a06d1a) ) + ROM_LOAD32_WORD("epr-16646.ic19", 0xc00000, 0x080000, CRC(7ba9fd6b) SHA1(6bcae009e8264bf038fe5d4bc436ec4fc1674831) ) + ROM_LOAD32_WORD("epr-16645.ic23", 0xc00002, 0x080000, CRC(78fe0b8a) SHA1(488fd6c0246752b7d9c25d7ba6cdc5b3911d1836) ) + + ROM_REGION16_LE( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-16522.25", 0x000000, 0x200000, CRC(55d39a57) SHA1(abf7b0fc0f111f90da42463d600db9fa32e95efe) ) + ROM_LOAD32_WORD("mpr-16521.24", 0x000002, 0x200000, CRC(af1934fb) SHA1(a6a21a23cd34d0de6d3e6a5c3c2687f905d0dc2a) ) + ROM_LOAD32_WORD("mpr-16517.27", 0x800000, 0x200000, CRC(4705d3dd) SHA1(99be9c5d9d99f7016199ffa8404fc471d09e360d) ) + ROM_LOAD32_WORD("mpr-16516.26", 0x800002, 0x200000, CRC(a260d45d) SHA1(a2ed7c586dfcb7980190b7057fa5366239035fe8) ) + + ROM_REGION( 0x20000, "cpu3", 0) // Communication program + ROM_LOAD( "epr-16726.bin", 0x000000, 0x020000, CRC(c179b8c7) SHA1(86d3e65c77fb53b1d380b629348f4ab5b3d39228) ) + + ROM_REGION( 0xc0000, M1AUDIO_CPU_REGION, ROMREGION_BE|ROMREGION_16BIT ) /* 68K code */ + ROM_LOAD16_WORD_SWAP("epr-16720.7", 0x000000, 0x020000, CRC(8e73cffd) SHA1(9933ccc0757e8c86e0adb938d1c89210b26841ea) ) + ROM_LOAD16_WORD_SWAP("epr-16721.8", 0x020000, 0x020000, CRC(1bb3b7b7) SHA1(ee2fd1480e535fc37e9932e6fe4e31344559fc87) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM1_REGION, 0 ) // Samples + ROM_LOAD("mpr-16491.32", 0x000000, 0x200000, CRC(89920903) SHA1(06d1d55470ae99f8de0f8c88c694f34c4eb13668) ) + ROM_LOAD("mpr-16492.33", 0x200000, 0x200000, CRC(459e701b) SHA1(2054f69cecad677eb00c6a3051f5b5d90885e19b) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM2_REGION, 0 ) // Samples + ROM_LOAD("mpr-16493.4", 0x000000, 0x200000, CRC(9990db15) SHA1(ea9a8b45a07dccaae62be7cf095532ce7596a70c) ) + ROM_LOAD("mpr-16494.5", 0x200000, 0x200000, CRC(600e1d6c) SHA1(d4e246fc57a16ff562bbcbccf6a739b706f58696) ) + + MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ + + ROM_REGION( 0x10000, "drivecpu", 0 ) // 838-10646 drive board + ROM_LOAD("epr-16488a.ic12", 0x000000, 0x010000, BAD_DUMP CRC(546c5d1a) SHA1(5533301fe7e3b499e6cee12230d2c656c3c667da) ) // unconfirmed +ROM_END + +ROM_START( daytonas ) /* Daytona USA (With Saturn Adverts) */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-17965.ic12", 0x000000, 0x020000, CRC(f022b3da) SHA1(3c337d12f4e12141b412a7289df46f44c66964b2) ) + ROM_LOAD32_WORD("epr-17966.ic13", 0x000002, 0x020000, CRC(f9e4ece5) SHA1(2df03455a00ae7066c30bace5c2b81581529e6f4) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-16528.10", 0x000000, 0x200000, CRC(9ce591f6) SHA1(e22fc8a70b533f7a6191f5952c581fb8f9627906) ) + ROM_LOAD32_WORD("mpr-16529.11", 0x000002, 0x200000, CRC(f7095eaf) SHA1(da3c922f950dd730ea348eae12aa1cb69cee9a58) ) + ROM_LOAD32_WORD("mpr-16808.8", 0x400000, 0x200000, CRC(44f1f5a0) SHA1(343866a6e2187a8ebc17f6727080f9f2f9ac9200) ) + ROM_LOAD32_WORD("mpr-16809.9", 0x400002, 0x200000, CRC(37a2dd12) SHA1(8192d8698d6bd52ee11cc28917aff5840c447627) ) + ROM_LOAD32_WORD("epr-17967.ic6", 0x800000, 0x080000, CRC(a94d8690) SHA1(a716646be6be0b87a550cb88b40e62a5c203ffdf) ) + ROM_LOAD32_WORD("epr-17968.ic7", 0x800002, 0x080000, CRC(9d5a92c6) SHA1(9eb43314f3dc6acbbe0aa991d7a5fa44afe9cdd0) ) + ROM_COPY( "main_data", 0x800000, 0x900000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xa00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xb00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xc00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xd00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xe00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xf00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD("mpr-16537.ic28", 0x000000, 0x200000, CRC(36b7c35a) SHA1(b32fd1d3fc8983fb5f2a7b236b665a8c9b52769f) ) + ROM_LOAD32_WORD("mpr-16536.ic29", 0x000002, 0x200000, CRC(6d6afed9) SHA1(2018468d7d849854b3d0cfbcd217317e2fc93555) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-16523.ic16", 0x000000, 0x200000, CRC(2f484d42) SHA1(0b83a3fc92b7d913a14cfb01d688c63555c17c41) ) + ROM_LOAD32_WORD("mpr-16518.ic20", 0x000002, 0x200000, CRC(df683bf7) SHA1(16afe5029591f3536b5b75d9cf50a34d0ea72c3d) ) + ROM_LOAD32_WORD("mpr-16524.ic17", 0x400000, 0x200000, CRC(34658bd7) SHA1(71b47626ffe5b26d1140afe1b830a9a2be86c88f) ) + ROM_LOAD32_WORD("mpr-16519.ic21", 0x400002, 0x200000, CRC(facd1c81) SHA1(dac8c281a5e9a6c4b60197e6676f3727264ee420) ) + ROM_LOAD32_WORD("mpr-16525.ic18", 0x800000, 0x200000, CRC(fb517521) SHA1(33f5f37ea2e09fc73eed5388b46fdf1fa9e285e6) ) + ROM_LOAD32_WORD("mpr-16520.ic22", 0x800002, 0x200000, CRC(d66bd9bd) SHA1(660171674484375a27595630e5e2d2ad76a06d1a) ) + ROM_LOAD32_WORD("mpr-16772.ic19", 0xc00000, 0x200000, CRC(770ed912) SHA1(1789f35dd403f73f8be18495a0fe4ad1e6841417) ) + ROM_LOAD32_WORD("mpr-16771.ic23", 0xc00002, 0x200000, CRC(a2205124) SHA1(257a3675e4ef6adbf61285a5daa5954223c28cb2) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-16522.25", 0x000000, 0x200000, CRC(55d39a57) SHA1(abf7b0fc0f111f90da42463d600db9fa32e95efe) ) + ROM_LOAD32_WORD("mpr-16521.24", 0x000002, 0x200000, CRC(af1934fb) SHA1(a6a21a23cd34d0de6d3e6a5c3c2687f905d0dc2a) ) + ROM_LOAD32_WORD("mpr-16770.27", 0x800000, 0x200000, CRC(f9fa7bfb) SHA1(8aa933b74d4e05dc49987238705e50b00e5dae73) ) + ROM_LOAD32_WORD("mpr-16769.26", 0x800002, 0x200000, CRC(e57429e9) SHA1(8c712ab09e61ef510741a55f29b3c4e497471372) ) + + ROM_REGION( 0x20000, "cpu3", 0) // Communication program + ROM_LOAD( "epr-16726.bin", 0x000000, 0x020000, CRC(c179b8c7) SHA1(86d3e65c77fb53b1d380b629348f4ab5b3d39228) ) + + ROM_REGION( 0xc0000, M1AUDIO_CPU_REGION, ROMREGION_BE|ROMREGION_16BIT ) /* 68K code */ + ROM_LOAD16_WORD_SWAP("epr-16720.7", 0x000000, 0x020000, CRC(8e73cffd) SHA1(9933ccc0757e8c86e0adb938d1c89210b26841ea) ) + ROM_LOAD16_WORD_SWAP("epr-16721.8", 0x020000, 0x020000, CRC(1bb3b7b7) SHA1(ee2fd1480e535fc37e9932e6fe4e31344559fc87) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM1_REGION, 0 ) // Samples + ROM_LOAD("mpr-16491.32", 0x000000, 0x200000, CRC(89920903) SHA1(06d1d55470ae99f8de0f8c88c694f34c4eb13668) ) + ROM_LOAD("mpr-16492.33", 0x200000, 0x200000, CRC(459e701b) SHA1(2054f69cecad677eb00c6a3051f5b5d90885e19b) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM2_REGION, 0 ) // Samples + ROM_LOAD("mpr-16493.4", 0x000000, 0x200000, CRC(9990db15) SHA1(ea9a8b45a07dccaae62be7cf095532ce7596a70c) ) + ROM_LOAD("mpr-16494.5", 0x200000, 0x200000, CRC(600e1d6c) SHA1(d4e246fc57a16ff562bbcbccf6a739b706f58696) ) + + MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ + + ROM_REGION( 0x10000, "drivecpu", 0 ) // 838-10646 drive board + ROM_LOAD("epr-16488a.ic12", 0x000000, 0x010000, BAD_DUMP CRC(546c5d1a) SHA1(5533301fe7e3b499e6cee12230d2c656c3c667da) ) // unconfirmed +ROM_END + +ROM_START( daytonat )/* Daytona USA (Japan, Turbo hack) */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program +// ROM_LOAD32_WORD( "turbo1.12", 0x000000, 0x080000, CRC(0b3d5d4e) SHA1(1660959cb383e22f0d6204547c30cf5fe9272b03) ) /* 4x overdump?, 0x20000 bytes repeat 4 times */ +// ROM_LOAD32_WORD( "turbo2.13", 0x000002, 0x080000, CRC(f7d4e866) SHA1(c8c43904257f718665f9f7a89838eba14bde9465) ) /* 4x overdump?, 0x20000 bytes repeat 4 times */ + ROM_LOAD32_WORD( "turbo1.12", 0x000000, 0x020000, CRC(4b41a341) SHA1(daa75f38a11eb16b04550edf53e11f0eaf55cd3e) ) + ROM_LOAD32_WORD( "turbo2.13", 0x000002, 0x020000, CRC(6ca580fa) SHA1(102ad6bf5fed4c9c407a9e82d85cff9f15db31c8) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-16528.10", 0x000000, 0x200000, CRC(9ce591f6) SHA1(e22fc8a70b533f7a6191f5952c581fb8f9627906) ) + ROM_LOAD32_WORD("mpr-16529.11", 0x000002, 0x200000, CRC(f7095eaf) SHA1(da3c922f950dd730ea348eae12aa1cb69cee9a58) ) + ROM_LOAD32_WORD("mpr-16808.8", 0x400000, 0x200000, CRC(44f1f5a0) SHA1(343866a6e2187a8ebc17f6727080f9f2f9ac9200) ) + ROM_LOAD32_WORD("mpr-16809.9", 0x400002, 0x200000, CRC(37a2dd12) SHA1(8192d8698d6bd52ee11cc28917aff5840c447627) ) + ROM_LOAD32_WORD("epr-16724a.6", 0x800000, 0x080000, CRC(469f10fd) SHA1(7fad3b8d03960e5e1f7a6cb36509238977e00fcc) ) + ROM_LOAD32_WORD("epr-16725a.7", 0x800002, 0x080000, CRC(ba0df8db) SHA1(d0c5581c56500b5266cab8e8151db24fcbdea0d7) ) + ROM_COPY( "main_data", 0x800000, 0x900000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xa00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xb00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xc00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xd00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xe00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xf00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD("mpr-16537.ic28", 0x000000, 0x200000, CRC(36b7c35a) SHA1(b32fd1d3fc8983fb5f2a7b236b665a8c9b52769f) ) + ROM_LOAD32_WORD("mpr-16536.ic29", 0x000002, 0x200000, CRC(6d6afed9) SHA1(2018468d7d849854b3d0cfbcd217317e2fc93555) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-16523.ic16", 0x000000, 0x200000, CRC(2f484d42) SHA1(0b83a3fc92b7d913a14cfb01d688c63555c17c41) ) + ROM_LOAD32_WORD("mpr-16518.ic20", 0x000002, 0x200000, CRC(df683bf7) SHA1(16afe5029591f3536b5b75d9cf50a34d0ea72c3d) ) + ROM_LOAD32_WORD("mpr-16524.ic17", 0x400000, 0x200000, CRC(34658bd7) SHA1(71b47626ffe5b26d1140afe1b830a9a2be86c88f) ) + ROM_LOAD32_WORD("mpr-16519.ic21", 0x400002, 0x200000, CRC(facd1c81) SHA1(dac8c281a5e9a6c4b60197e6676f3727264ee420) ) + ROM_LOAD32_WORD("mpr-16525.ic18", 0x800000, 0x200000, CRC(fb517521) SHA1(33f5f37ea2e09fc73eed5388b46fdf1fa9e285e6) ) + ROM_LOAD32_WORD("mpr-16520.ic22", 0x800002, 0x200000, CRC(d66bd9bd) SHA1(660171674484375a27595630e5e2d2ad76a06d1a) ) + ROM_LOAD32_WORD("mpr-16772.ic19", 0xc00000, 0x200000, CRC(770ed912) SHA1(1789f35dd403f73f8be18495a0fe4ad1e6841417) ) + ROM_LOAD32_WORD("mpr-16771.ic23", 0xc00002, 0x200000, CRC(a2205124) SHA1(257a3675e4ef6adbf61285a5daa5954223c28cb2) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-16522.25", 0x000000, 0x200000, CRC(55d39a57) SHA1(abf7b0fc0f111f90da42463d600db9fa32e95efe) ) + ROM_LOAD32_WORD("mpr-16521.24", 0x000002, 0x200000, CRC(af1934fb) SHA1(a6a21a23cd34d0de6d3e6a5c3c2687f905d0dc2a) ) + ROM_LOAD32_WORD("mpr-16770.27", 0x800000, 0x200000, CRC(f9fa7bfb) SHA1(8aa933b74d4e05dc49987238705e50b00e5dae73) ) + ROM_LOAD32_WORD("mpr-16769.26", 0x800002, 0x200000, CRC(e57429e9) SHA1(8c712ab09e61ef510741a55f29b3c4e497471372) ) + + ROM_REGION( 0x20000, "cpu3", 0) // Communication program + ROM_LOAD( "epr-16726.bin", 0x000000, 0x020000, CRC(c179b8c7) SHA1(86d3e65c77fb53b1d380b629348f4ab5b3d39228) ) + + ROM_REGION( 0xc0000, M1AUDIO_CPU_REGION, ROMREGION_BE|ROMREGION_16BIT ) /* 68K code */ + ROM_LOAD16_WORD_SWAP("epr-16720.7", 0x000000, 0x020000, CRC(8e73cffd) SHA1(9933ccc0757e8c86e0adb938d1c89210b26841ea) ) + ROM_LOAD16_WORD_SWAP("epr-16721.8", 0x020000, 0x020000, CRC(1bb3b7b7) SHA1(ee2fd1480e535fc37e9932e6fe4e31344559fc87) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM1_REGION, 0 ) // Samples + ROM_LOAD("mpr-16491.32", 0x000000, 0x200000, CRC(89920903) SHA1(06d1d55470ae99f8de0f8c88c694f34c4eb13668) ) + ROM_LOAD("mpr-16492.33", 0x200000, 0x200000, CRC(459e701b) SHA1(2054f69cecad677eb00c6a3051f5b5d90885e19b) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM2_REGION, 0 ) // Samples + ROM_LOAD("mpr-16493.4", 0x000000, 0x200000, CRC(9990db15) SHA1(ea9a8b45a07dccaae62be7cf095532ce7596a70c) ) + ROM_LOAD("mpr-16494.5", 0x200000, 0x200000, CRC(600e1d6c) SHA1(d4e246fc57a16ff562bbcbccf6a739b706f58696) ) + + MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ + + ROM_REGION( 0x10000, "drivecpu", 0 ) // 838-10646 drive board + ROM_LOAD("epr-16488a.ic12", 0x000000, 0x010000, CRC(546c5d1a) SHA1(5533301fe7e3b499e6cee12230d2c656c3c667da) ) +ROM_END + +ROM_START( daytonata )/* Daytona USA (Japan, Turbo hack) */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "dayturbo.12", 0x000000, 0x020000, CRC(aec6857a) SHA1(e29261de4344c99d82c9e494467605593cc776d8) ) + ROM_LOAD32_WORD( "dayturbo.13", 0x000002, 0x020000, CRC(cb657edc) SHA1(90b8f673a4ef88e7c1f6012b80823d3e756f9743) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-16528.10", 0x000000, 0x200000, CRC(9ce591f6) SHA1(e22fc8a70b533f7a6191f5952c581fb8f9627906) ) + ROM_LOAD32_WORD("mpr-16529.11", 0x000002, 0x200000, CRC(f7095eaf) SHA1(da3c922f950dd730ea348eae12aa1cb69cee9a58) ) + ROM_LOAD32_WORD("mpr-16808.8", 0x400000, 0x200000, CRC(44f1f5a0) SHA1(343866a6e2187a8ebc17f6727080f9f2f9ac9200) ) + ROM_LOAD32_WORD("mpr-16809.9", 0x400002, 0x200000, CRC(37a2dd12) SHA1(8192d8698d6bd52ee11cc28917aff5840c447627) ) + ROM_LOAD32_WORD("epr-16724a.6", 0x800000, 0x080000, CRC(469f10fd) SHA1(7fad3b8d03960e5e1f7a6cb36509238977e00fcc) ) + ROM_LOAD32_WORD("epr-16725a.7", 0x800002, 0x080000, CRC(ba0df8db) SHA1(d0c5581c56500b5266cab8e8151db24fcbdea0d7) ) + ROM_COPY( "main_data", 0x800000, 0x900000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xa00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xb00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xc00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xd00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xe00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xf00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD("mpr-16537.ic28", 0x000000, 0x200000, CRC(36b7c35a) SHA1(b32fd1d3fc8983fb5f2a7b236b665a8c9b52769f) ) + ROM_LOAD32_WORD("mpr-16536.ic29", 0x000002, 0x200000, CRC(6d6afed9) SHA1(2018468d7d849854b3d0cfbcd217317e2fc93555) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-16523.ic16", 0x000000, 0x200000, CRC(2f484d42) SHA1(0b83a3fc92b7d913a14cfb01d688c63555c17c41) ) + ROM_LOAD32_WORD("mpr-16518.ic20", 0x000002, 0x200000, CRC(df683bf7) SHA1(16afe5029591f3536b5b75d9cf50a34d0ea72c3d) ) + ROM_LOAD32_WORD("mpr-16524.ic17", 0x400000, 0x200000, CRC(34658bd7) SHA1(71b47626ffe5b26d1140afe1b830a9a2be86c88f) ) + ROM_LOAD32_WORD("mpr-16519.ic21", 0x400002, 0x200000, CRC(facd1c81) SHA1(dac8c281a5e9a6c4b60197e6676f3727264ee420) ) + ROM_LOAD32_WORD("mpr-16525.ic18", 0x800000, 0x200000, CRC(fb517521) SHA1(33f5f37ea2e09fc73eed5388b46fdf1fa9e285e6) ) + ROM_LOAD32_WORD("mpr-16520.ic22", 0x800002, 0x200000, CRC(d66bd9bd) SHA1(660171674484375a27595630e5e2d2ad76a06d1a) ) + ROM_LOAD32_WORD("mpr-16772.ic19", 0xc00000, 0x200000, CRC(770ed912) SHA1(1789f35dd403f73f8be18495a0fe4ad1e6841417) ) + ROM_LOAD32_WORD("mpr-16771.ic23", 0xc00002, 0x200000, CRC(a2205124) SHA1(257a3675e4ef6adbf61285a5daa5954223c28cb2) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-16522.25", 0x000000, 0x200000, CRC(55d39a57) SHA1(abf7b0fc0f111f90da42463d600db9fa32e95efe) ) + ROM_LOAD32_WORD("mpr-16521.24", 0x000002, 0x200000, CRC(af1934fb) SHA1(a6a21a23cd34d0de6d3e6a5c3c2687f905d0dc2a) ) + ROM_LOAD32_WORD("mpr-16770.27", 0x800000, 0x200000, CRC(f9fa7bfb) SHA1(8aa933b74d4e05dc49987238705e50b00e5dae73) ) + ROM_LOAD32_WORD("mpr-16769.26", 0x800002, 0x200000, CRC(e57429e9) SHA1(8c712ab09e61ef510741a55f29b3c4e497471372) ) + + ROM_REGION( 0x20000, "cpu3", 0) // Communication program + ROM_LOAD( "epr-16726.bin", 0x000000, 0x020000, CRC(c179b8c7) SHA1(86d3e65c77fb53b1d380b629348f4ab5b3d39228) ) + + ROM_REGION( 0xc0000, M1AUDIO_CPU_REGION, ROMREGION_BE|ROMREGION_16BIT ) /* 68K code */ + ROM_LOAD16_WORD_SWAP("epr-16720.7", 0x000000, 0x020000, CRC(8e73cffd) SHA1(9933ccc0757e8c86e0adb938d1c89210b26841ea) ) + ROM_LOAD16_WORD_SWAP("epr-16721.8", 0x020000, 0x020000, CRC(1bb3b7b7) SHA1(ee2fd1480e535fc37e9932e6fe4e31344559fc87) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM1_REGION, 0 ) // Samples + ROM_LOAD("mpr-16491.32", 0x000000, 0x200000, CRC(89920903) SHA1(06d1d55470ae99f8de0f8c88c694f34c4eb13668) ) + ROM_LOAD("mpr-16492.33", 0x200000, 0x200000, CRC(459e701b) SHA1(2054f69cecad677eb00c6a3051f5b5d90885e19b) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM2_REGION, 0 ) // Samples + ROM_LOAD("mpr-16493.4", 0x000000, 0x200000, CRC(9990db15) SHA1(ea9a8b45a07dccaae62be7cf095532ce7596a70c) ) + ROM_LOAD("mpr-16494.5", 0x200000, 0x200000, CRC(600e1d6c) SHA1(d4e246fc57a16ff562bbcbccf6a739b706f58696) ) + + MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ + + ROM_REGION( 0x10000, "drivecpu", 0 ) // 838-10646 drive board + ROM_LOAD("epr-16488a.ic12", 0x000000, 0x010000, CRC(546c5d1a) SHA1(5533301fe7e3b499e6cee12230d2c656c3c667da) ) +ROM_END + +/* +Daytona "To The MAXX" upgrade. +Unofficial Sega hack for Model 2 Daytona machines + +Kits contains 4 IC's +3 of them are standard 27C1024 EPROMS +1 of them is a PIC 16F84 mounted to a small board the size of an EPROM +with a 40 pin socket mounted on it, which plugs into position IC15 +*/ + +ROM_START( daytonam ) /* Daytona USA (Japan, To The MAXX) */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "maxx.12", 0x000000, 0x020000, CRC(604ef2d9) SHA1(b1d5f0d41bea2e74fb9346da35a5041f4464265e) ) + ROM_LOAD32_WORD( "maxx.13", 0x000002, 0x020000, CRC(7d319970) SHA1(5bc150a77f20a29f54acdf5043fb1e8e55f6b08b) ) + ROM_LOAD32_WORD( "maxx.14", 0x040000, 0x020000, CRC(2debfce0) SHA1(b0f578ae68d49a3eebaf9b453a1ad774c8620476) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-16528.10", 0x000000, 0x200000, CRC(9ce591f6) SHA1(e22fc8a70b533f7a6191f5952c581fb8f9627906) ) + ROM_LOAD32_WORD("mpr-16529.11", 0x000002, 0x200000, CRC(f7095eaf) SHA1(da3c922f950dd730ea348eae12aa1cb69cee9a58) ) + ROM_LOAD32_WORD("mpr-16808.8", 0x400000, 0x200000, CRC(44f1f5a0) SHA1(343866a6e2187a8ebc17f6727080f9f2f9ac9200) ) + ROM_LOAD32_WORD("mpr-16809.9", 0x400002, 0x200000, CRC(37a2dd12) SHA1(8192d8698d6bd52ee11cc28917aff5840c447627) ) + ROM_LOAD32_WORD("epr-16724a.6", 0x800000, 0x080000, CRC(469f10fd) SHA1(7fad3b8d03960e5e1f7a6cb36509238977e00fcc) ) + ROM_LOAD32_WORD("epr-16725a.7", 0x800002, 0x080000, CRC(ba0df8db) SHA1(d0c5581c56500b5266cab8e8151db24fcbdea0d7) ) + ROM_COPY( "main_data", 0x800000, 0x900000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xa00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xb00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xc00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xd00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xe00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xf00000, 0x100000 ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD("mpr-16537.ic28", 0x000000, 0x200000, CRC(36b7c35a) SHA1(b32fd1d3fc8983fb5f2a7b236b665a8c9b52769f) ) + ROM_LOAD32_WORD("mpr-16536.ic29", 0x000002, 0x200000, CRC(6d6afed9) SHA1(2018468d7d849854b3d0cfbcd217317e2fc93555) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-16523.ic16", 0x000000, 0x200000, CRC(2f484d42) SHA1(0b83a3fc92b7d913a14cfb01d688c63555c17c41) ) + ROM_LOAD32_WORD("mpr-16518.ic20", 0x000002, 0x200000, CRC(df683bf7) SHA1(16afe5029591f3536b5b75d9cf50a34d0ea72c3d) ) + ROM_LOAD32_WORD("mpr-16524.ic17", 0x400000, 0x200000, CRC(34658bd7) SHA1(71b47626ffe5b26d1140afe1b830a9a2be86c88f) ) + ROM_LOAD32_WORD("mpr-16519.ic21", 0x400002, 0x200000, CRC(facd1c81) SHA1(dac8c281a5e9a6c4b60197e6676f3727264ee420) ) + ROM_LOAD32_WORD("mpr-16525.ic18", 0x800000, 0x200000, CRC(fb517521) SHA1(33f5f37ea2e09fc73eed5388b46fdf1fa9e285e6) ) + ROM_LOAD32_WORD("mpr-16520.ic22", 0x800002, 0x200000, CRC(d66bd9bd) SHA1(660171674484375a27595630e5e2d2ad76a06d1a) ) + ROM_LOAD32_WORD("mpr-16772.ic19", 0xc00000, 0x200000, CRC(770ed912) SHA1(1789f35dd403f73f8be18495a0fe4ad1e6841417) ) + ROM_LOAD32_WORD("mpr-16771.ic23", 0xc00002, 0x200000, CRC(a2205124) SHA1(257a3675e4ef6adbf61285a5daa5954223c28cb2) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-16522.25", 0x000000, 0x200000, CRC(55d39a57) SHA1(abf7b0fc0f111f90da42463d600db9fa32e95efe) ) + ROM_LOAD32_WORD("mpr-16521.24", 0x000002, 0x200000, CRC(af1934fb) SHA1(a6a21a23cd34d0de6d3e6a5c3c2687f905d0dc2a) ) + ROM_LOAD32_WORD("mpr-16770.27", 0x800000, 0x200000, CRC(f9fa7bfb) SHA1(8aa933b74d4e05dc49987238705e50b00e5dae73) ) + ROM_LOAD32_WORD("mpr-16769.26", 0x800002, 0x200000, CRC(e57429e9) SHA1(8c712ab09e61ef510741a55f29b3c4e497471372) ) + + ROM_REGION( 0x20000, "cpu3", 0) // Communication program + ROM_LOAD( "epr-16726.bin", 0x000000, 0x020000, CRC(c179b8c7) SHA1(86d3e65c77fb53b1d380b629348f4ab5b3d39228) ) + + ROM_REGION( 0xc0000, M1AUDIO_CPU_REGION, ROMREGION_BE|ROMREGION_16BIT ) /* 68K code */ + ROM_LOAD16_WORD_SWAP("epr-16720.7", 0x000000, 0x020000, CRC(8e73cffd) SHA1(9933ccc0757e8c86e0adb938d1c89210b26841ea) ) + ROM_LOAD16_WORD_SWAP("epr-16721.8", 0x020000, 0x020000, CRC(1bb3b7b7) SHA1(ee2fd1480e535fc37e9932e6fe4e31344559fc87) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM1_REGION, 0 ) // Samples + ROM_LOAD("mpr-16491.32", 0x000000, 0x200000, CRC(89920903) SHA1(06d1d55470ae99f8de0f8c88c694f34c4eb13668) ) + ROM_LOAD("mpr-16492.33", 0x200000, 0x200000, CRC(459e701b) SHA1(2054f69cecad677eb00c6a3051f5b5d90885e19b) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM2_REGION, 0 ) // Samples + ROM_LOAD("mpr-16493.4", 0x000000, 0x200000, CRC(9990db15) SHA1(ea9a8b45a07dccaae62be7cf095532ce7596a70c) ) + ROM_LOAD("mpr-16494.5", 0x200000, 0x200000, CRC(600e1d6c) SHA1(d4e246fc57a16ff562bbcbccf6a739b706f58696) ) + + MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ + + ROM_REGION( 0x10000, "drivecpu", 0 ) // 838-10646 drive board + ROM_LOAD("epr-16488a.ic12", 0x000000, 0x010000, CRC(546c5d1a) SHA1(5533301fe7e3b499e6cee12230d2c656c3c667da) ) + + ROM_REGION( 0x10000, "pic", 0) + ROM_LOAD("pic.bin", 0x00000, 0x10000, NO_DUMP ) +ROM_END + +ROM_START( daytonagtx ) + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "gtx.12", 0x000000, 0x020000, CRC(08283a6f) SHA1(643110a3ea5fb6092c469b6b49a396084e985a7a) ) + ROM_LOAD32_WORD( "gtx.13", 0x000002, 0x020000, CRC(f9b356ae) SHA1(ad635540d64e05c7246c9de6439a4e3b3d1cdf08) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-16528.10", 0x000000, 0x200000, CRC(9ce591f6) SHA1(e22fc8a70b533f7a6191f5952c581fb8f9627906) ) + ROM_LOAD32_WORD("mpr-16529.11", 0x000002, 0x200000, CRC(f7095eaf) SHA1(da3c922f950dd730ea348eae12aa1cb69cee9a58) ) + ROM_LOAD32_WORD("mpr-16808.8", 0x400000, 0x200000, CRC(44f1f5a0) SHA1(343866a6e2187a8ebc17f6727080f9f2f9ac9200) ) + ROM_LOAD32_WORD("mpr-16809.9", 0x400002, 0x200000, CRC(37a2dd12) SHA1(8192d8698d6bd52ee11cc28917aff5840c447627) ) + ROM_LOAD32_WORD("epr-16724a.6", 0x800000, 0x080000, CRC(469f10fd) SHA1(7fad3b8d03960e5e1f7a6cb36509238977e00fcc) ) + ROM_LOAD32_WORD("epr-16725a.7", 0x800002, 0x080000, CRC(ba0df8db) SHA1(d0c5581c56500b5266cab8e8151db24fcbdea0d7) ) + ROM_COPY( "main_data", 0x800000, 0x900000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xa00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xb00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xc00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xd00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xe00000, 0x100000 ) + ROM_COPY( "main_data", 0x800000, 0xf00000, 0x100000 ) + + ROM_REGION32_LE( 0x300000, "prot_data", ROMREGION_ERASEFF ) // banked data + ROM_LOAD32_WORD("bank0.bin", 0x000002, 0x080000, CRC(21b603b4) SHA1(3f8f83fbf2ce5055fa85075c95da617fe2a8738a) ) + ROM_LOAD32_WORD("bank1.bin", 0x100002, 0x080000, CRC(c1971f23) SHA1(3db88552ff2166f6eb2a9200e8609b52c1266274) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD("mpr-16537.ic28", 0x000000, 0x200000, CRC(36b7c35a) SHA1(b32fd1d3fc8983fb5f2a7b236b665a8c9b52769f) ) + ROM_LOAD32_WORD("mpr-16536.ic29", 0x000002, 0x200000, CRC(6d6afed9) SHA1(2018468d7d849854b3d0cfbcd217317e2fc93555) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-16523.ic16", 0x000000, 0x200000, CRC(2f484d42) SHA1(0b83a3fc92b7d913a14cfb01d688c63555c17c41) ) + ROM_LOAD32_WORD("mpr-16518.ic20", 0x000002, 0x200000, CRC(df683bf7) SHA1(16afe5029591f3536b5b75d9cf50a34d0ea72c3d) ) + ROM_LOAD32_WORD("mpr-16524.ic17", 0x400000, 0x200000, CRC(34658bd7) SHA1(71b47626ffe5b26d1140afe1b830a9a2be86c88f) ) + ROM_LOAD32_WORD("mpr-16519.ic21", 0x400002, 0x200000, CRC(facd1c81) SHA1(dac8c281a5e9a6c4b60197e6676f3727264ee420) ) + ROM_LOAD32_WORD("mpr-16525.ic18", 0x800000, 0x200000, CRC(fb517521) SHA1(33f5f37ea2e09fc73eed5388b46fdf1fa9e285e6) ) + ROM_LOAD32_WORD("mpr-16520.ic22", 0x800002, 0x200000, CRC(d66bd9bd) SHA1(660171674484375a27595630e5e2d2ad76a06d1a) ) + ROM_LOAD32_WORD("mpr-16772.ic19", 0xc00000, 0x200000, CRC(770ed912) SHA1(1789f35dd403f73f8be18495a0fe4ad1e6841417) ) + ROM_LOAD32_WORD("mpr-16771.ic23", 0xc00002, 0x200000, CRC(a2205124) SHA1(257a3675e4ef6adbf61285a5daa5954223c28cb2) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-16522.25", 0x000000, 0x200000, CRC(55d39a57) SHA1(abf7b0fc0f111f90da42463d600db9fa32e95efe) ) + ROM_LOAD32_WORD("mpr-16521.24", 0x000002, 0x200000, CRC(af1934fb) SHA1(a6a21a23cd34d0de6d3e6a5c3c2687f905d0dc2a) ) + ROM_LOAD32_WORD("mpr-16770.27", 0x800000, 0x200000, CRC(f9fa7bfb) SHA1(8aa933b74d4e05dc49987238705e50b00e5dae73) ) + ROM_LOAD32_WORD("mpr-16769.26", 0x800002, 0x200000, CRC(e57429e9) SHA1(8c712ab09e61ef510741a55f29b3c4e497471372) ) + + ROM_REGION( 0x20000, "cpu3", 0) // Communication program + ROM_LOAD( "epr-16726.bin", 0x000000, 0x020000, CRC(c179b8c7) SHA1(86d3e65c77fb53b1d380b629348f4ab5b3d39228) ) + + ROM_REGION( 0xc0000, M1AUDIO_CPU_REGION, ROMREGION_BE|ROMREGION_16BIT ) /* 68K code */ + ROM_LOAD16_WORD_SWAP("epr-16720.7", 0x000000, 0x020000, CRC(8e73cffd) SHA1(9933ccc0757e8c86e0adb938d1c89210b26841ea) ) + ROM_LOAD16_WORD_SWAP("epr-16721.8", 0x020000, 0x020000, CRC(1bb3b7b7) SHA1(ee2fd1480e535fc37e9932e6fe4e31344559fc87) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM1_REGION, 0 ) // Samples + ROM_LOAD("mpr-16491.32", 0x000000, 0x200000, CRC(89920903) SHA1(06d1d55470ae99f8de0f8c88c694f34c4eb13668) ) + ROM_LOAD("mpr-16492.33", 0x200000, 0x200000, CRC(459e701b) SHA1(2054f69cecad677eb00c6a3051f5b5d90885e19b) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM2_REGION, 0 ) // Samples + ROM_LOAD("mpr-16493.4", 0x000000, 0x200000, CRC(9990db15) SHA1(ea9a8b45a07dccaae62be7cf095532ce7596a70c) ) + ROM_LOAD("mpr-16494.5", 0x200000, 0x200000, CRC(600e1d6c) SHA1(d4e246fc57a16ff562bbcbccf6a739b706f58696) ) + + MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ + + ROM_REGION( 0x10000, "drivecpu", 0 ) // 838-10646 drive board + ROM_LOAD("epr-16488a.ic12", 0x000000, 0x010000, CRC(546c5d1a) SHA1(5533301fe7e3b499e6cee12230d2c656c3c667da) ) +ROM_END + +ROM_START( vcop ) /* Virtua Cop Revision B, Model 2 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-17166b.12", 0x000000, 0x020000, CRC(a5647c59) SHA1(0a9e0be447d3591e82efd40ef4acbfe7ae211579) ) + ROM_LOAD32_WORD( "epr-17167b.13", 0x000002, 0x020000, CRC(f5dde26a) SHA1(95db029bc4206a44ea216afbcd1c19689f79115a) ) + ROM_LOAD32_WORD( "epr-17160a.14", 0x040000, 0x020000, CRC(267f3242) SHA1(40ec09cda984bb80969bfae2278432153137c213) ) + ROM_LOAD32_WORD( "epr-17161a.15", 0x040002, 0x020000, CRC(f7126876) SHA1(b0ceb1206edaa507ec15723497fcd447a511f423) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-17164.10", 0x000000, 0x200000, CRC(ac5fc501) SHA1(e60deec1e79d207d37d3f4ddd83a1b2125c411ac) ) + ROM_LOAD32_WORD( "mpr-17165.11", 0x000002, 0x200000, CRC(82296d00) SHA1(23327137b36c98dfb9175ea9d36478e7385dfac2) ) + ROM_LOAD32_WORD( "mpr-17162.8", 0x400000, 0x200000, CRC(60ddd41e) SHA1(0894c9bcdedeb09f921419a309858e242cb8db3a) ) + ROM_LOAD32_WORD( "mpr-17163.9", 0x400002, 0x200000, CRC(8c1f9dc8) SHA1(cf99a5bb4f343d59c8d6f5716287b6e16bef6412) ) + ROM_LOAD32_WORD( "epr-17168a.6", 0x800000, 0x080000, CRC(59091a37) SHA1(14591c7015aaf126755be584aa94c04e6de222fa) ) + ROM_LOAD32_WORD( "epr-17169a.7", 0x800002, 0x080000, CRC(0495808d) SHA1(5b86a9a68c2b52f942aa8d858ee7a491f546a921) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-17159.16", 0x000000, 0x200000, CRC(e218727d) SHA1(1458d01d49936a0b8d497b62ff9ea940ca753b37) ) + ROM_LOAD32_WORD( "mpr-17156.20", 0x000002, 0x200000, CRC(c4f4aabf) SHA1(8814cd329609cc8a188fedd770230bb9a5d00361) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD( "mpr-17158.25", 0x000000, 0x200000, CRC(1108d1ec) SHA1(e95d4166bd4b26c5f21b85821b410f53045f4309) ) + ROM_LOAD32_WORD( "mpr-17157.24", 0x000002, 0x200000, CRC(cf31e33d) SHA1(0cb62d4f28b5ad8a7e4c82b0ca8aea3037b05455) ) + + ROM_REGION( 0xc0000, M1AUDIO_CPU_REGION, ROMREGION_BE|ROMREGION_16BIT ) /* 68K code */ + ROM_LOAD16_WORD_SWAP( "epr-17170.7", 0x000000, 0x020000, CRC(06a38ae2) SHA1(a2c3d14d9266449ebfc6d976a956e0a8a602cfb0) ) + ROM_LOAD16_WORD_SWAP( "epr-17171.8", 0x020000, 0x020000, CRC(b5e436f8) SHA1(1da3cb52d64f52d03a8de9954afffbc6e1549a5b) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM1_REGION, 0 ) // Samples + ROM_LOAD( "mpr-17172.32", 0x000000, 0x100000, CRC(ab22cac3) SHA1(0e872158faeb8c0404b10cdf0a3fa36f89a5093e) ) + ROM_LOAD( "mpr-17173.33", 0x200000, 0x100000, CRC(3cb4005c) SHA1(a56f436ea6dfe0968b73ae7bc92bb2f4c612460d) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM2_REGION, 0 ) // Samples + ROM_LOAD( "mpr-17174.4", 0x000000, 0x200000, CRC(a50369cc) SHA1(69807157baf6e3679adc95633c82b0236db01247) ) + ROM_LOAD( "mpr-17175.5", 0x200000, 0x200000, CRC(9136d43c) SHA1(741f80a8ff8165ffe171dc568e0da4ad0bde4809) ) + + MODEL2_CPU_BOARD +ROM_END + +ROM_START( vcopa ) /* Virtua Cop Revision A, Model 2 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD( "epr-17166a.12", 0x000000, 0x020000, CRC(702566e6) SHA1(478eec1e1d51a2ff63e8fd591528f0ca70df9310) ) + ROM_LOAD32_WORD( "epr-17167a.13", 0x000002, 0x020000, CRC(9b8e05a8) SHA1(5e95f3f901d7f87f8c9cbeb3a65cd1b74e9cc09b) ) + ROM_LOAD32_WORD( "epr-17160a.14", 0x040000, 0x020000, CRC(267f3242) SHA1(40ec09cda984bb80969bfae2278432153137c213) ) + ROM_LOAD32_WORD( "epr-17161a.15", 0x040002, 0x020000, CRC(f7126876) SHA1(b0ceb1206edaa507ec15723497fcd447a511f423) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD( "mpr-17164.10", 0x000000, 0x200000, CRC(ac5fc501) SHA1(e60deec1e79d207d37d3f4ddd83a1b2125c411ac) ) + ROM_LOAD32_WORD( "mpr-17165.11", 0x000002, 0x200000, CRC(82296d00) SHA1(23327137b36c98dfb9175ea9d36478e7385dfac2) ) + ROM_LOAD32_WORD( "mpr-17162.8", 0x400000, 0x200000, CRC(60ddd41e) SHA1(0894c9bcdedeb09f921419a309858e242cb8db3a) ) + ROM_LOAD32_WORD( "mpr-17163.9", 0x400002, 0x200000, CRC(8c1f9dc8) SHA1(cf99a5bb4f343d59c8d6f5716287b6e16bef6412) ) + ROM_LOAD32_WORD( "epr-17168a.6", 0x800000, 0x080000, CRC(59091a37) SHA1(14591c7015aaf126755be584aa94c04e6de222fa) ) + ROM_LOAD32_WORD( "epr-17169a.7", 0x800002, 0x080000, CRC(0495808d) SHA1(5b86a9a68c2b52f942aa8d858ee7a491f546a921) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD( "mpr-17159.16", 0x000000, 0x200000, CRC(e218727d) SHA1(1458d01d49936a0b8d497b62ff9ea940ca753b37) ) + ROM_LOAD32_WORD( "mpr-17156.20", 0x000002, 0x200000, CRC(c4f4aabf) SHA1(8814cd329609cc8a188fedd770230bb9a5d00361) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD( "mpr-17158.25", 0x000000, 0x200000, CRC(1108d1ec) SHA1(e95d4166bd4b26c5f21b85821b410f53045f4309) ) + ROM_LOAD32_WORD( "mpr-17157.24", 0x000002, 0x200000, CRC(cf31e33d) SHA1(0cb62d4f28b5ad8a7e4c82b0ca8aea3037b05455) ) + + ROM_REGION( 0xc0000, M1AUDIO_CPU_REGION, ROMREGION_BE|ROMREGION_16BIT ) /* 68K code */ + ROM_LOAD16_WORD_SWAP( "epr-17170.7", 0x000000, 0x020000, CRC(06a38ae2) SHA1(a2c3d14d9266449ebfc6d976a956e0a8a602cfb0) ) + ROM_LOAD16_WORD_SWAP( "epr-17171.8", 0x020000, 0x020000, CRC(b5e436f8) SHA1(1da3cb52d64f52d03a8de9954afffbc6e1549a5b) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM1_REGION, 0 ) // Samples + ROM_LOAD( "mpr-17172.32", 0x000000, 0x100000, CRC(ab22cac3) SHA1(0e872158faeb8c0404b10cdf0a3fa36f89a5093e) ) + ROM_LOAD( "mpr-17173.33", 0x200000, 0x100000, CRC(3cb4005c) SHA1(a56f436ea6dfe0968b73ae7bc92bb2f4c612460d) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM2_REGION, 0 ) // Samples + ROM_LOAD( "mpr-17174.4", 0x000000, 0x200000, CRC(a50369cc) SHA1(69807157baf6e3679adc95633c82b0236db01247) ) + ROM_LOAD( "mpr-17175.5", 0x200000, 0x200000, CRC(9136d43c) SHA1(741f80a8ff8165ffe171dc568e0da4ad0bde4809) ) + + MODEL2_CPU_BOARD +ROM_END + +ROM_START( desert ) /* Desert Tank, Model 2, Sega Game ID# 833-11002, ROM board ID# 834-11003 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-16976.12", 0x000000, 0x020000, CRC(d036dff0) SHA1(f3e5f22ef1f3ff9c9a1ff7352cdad3e2c2977a51) ) + ROM_LOAD32_WORD("epr-16977.13", 0x000002, 0x020000, CRC(e91194bd) SHA1(cec8eb8d4b52c387d5750ee5a0c6e6ce7c0fe80d) ) + ROM_LOAD32_WORD("epr-16970.14", 0x040000, 0x020000, CRC(4ea12d1f) SHA1(75133b03a450518bae27d62f0a1c37451c8c49a0) ) + ROM_LOAD32_WORD("epr-16971.15", 0x040002, 0x020000, CRC(d630b220) SHA1(ca7bd1e01e396b8b6a0925e767cc714729e0fd42) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("mpr-16974.10", 0x000000, 0x200000, CRC(2ab491c5) SHA1(79deb3877d0ffc8ee75c01d3bf0a6dd71cc2b552) ) + ROM_LOAD32_WORD("mpr-16975.11", 0x000002, 0x200000, CRC(e24fe7d3) SHA1(f8ab28c95d421978b1517adeacf09e7ee203d8f6) ) + ROM_LOAD32_WORD("mpr-16972.8", 0x400000, 0x200000, CRC(23e53748) SHA1(9c8a1d8aec8f9e5504e5aac0390dfb3770ab8616) ) + ROM_LOAD32_WORD("mpr-16973.9", 0x400002, 0x200000, CRC(77d6f509) SHA1(c83bce7f7b0a15bd14b99e829640b7dd9948e671) ) + ROM_LOAD32_WORD("epr-16978.6", 0x800000, 0x080000, CRC(38b3e574) SHA1(a1133df608b0fbb9c53bbeb29138650c87845d2c) ) + ROM_LOAD32_WORD("epr-16979.7", 0x800002, 0x080000, CRC(c314eb8b) SHA1(0c851dedd5c42b026195faed7d028924698a8b27) ) + + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) + ROM_LOAD32_WORD("epr-16981.28", 0x000000, 0x080000, CRC(ae847571) SHA1(32d0f9e685667ae9fddacea0b9f4ad6fb3a6fdad) ) + ROM_LOAD32_WORD("epr-16980.29", 0x000002, 0x080000, CRC(5239b864) SHA1(e889556e0f1ea80de52afff563b0923f87cef7ab) ) + + ROM_REGION( 0x800000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("mpr-16968.16", 0x000000, 0x200000, CRC(4a16f465) SHA1(411214ed65ce966040d4299b50bfaa40f7f5f266) ) + ROM_LOAD32_WORD("mpr-16964.21", 0x000002, 0x200000, CRC(d4a769b6) SHA1(845c34f95a49e06e3996b0c67aa73b4886fa8996) ) + ROM_LOAD32_WORD("mpr-16969.17", 0x400000, 0x200000, CRC(887380ac) SHA1(03a9f601764d06cb0b2daaadf4f8433f327abd4a) ) + ROM_LOAD32_WORD("mpr-16965.20", 0x400002, 0x200000, CRC(9ba7645f) SHA1(c04f369961f908bac16fad8e32b863202390c205) ) + + ROM_REGION( 0x1000000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("mpr-16967.25", 0x000000, 0x200000, CRC(b8b84c9d) SHA1(00ef320988609e98c8af383b68d845e3be8d0a03) ) + ROM_LOAD32_WORD("mpr-16966.24", 0x000002, 0x200000, CRC(7484efe9) SHA1(33e72139ad6c2990428e3fa041dbcdf39aca1c7a) ) + + ROM_REGION( 0x20000, "cpu4", ROMREGION_ERASE00 ) // Communication program + + ROM_REGION( 0xc0000, M1AUDIO_CPU_REGION, ROMREGION_BE|ROMREGION_16BIT ) /* 68K code */ + ROM_LOAD16_WORD_SWAP("epr-16985.7", 0x000000, 0x20000, CRC(8c4d9056) SHA1(785752d761c648d1177c5f0cfa3e9fa44135d6dc) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM1_REGION, 0 ) // Samples + ROM_LOAD("mpr-16986.32", 0x000000, 0x200000, CRC(559612f9) SHA1(33bcaddfc7d8fe899707e663299e8f04e9004d51) ) + + ROM_REGION( 0x400000, M1AUDIO_MPCM2_REGION, 0 ) // Samples + ROM_LOAD("mpr-16988.4", 0x000000, 0x200000, CRC(bc705875) SHA1(5351c6bd2d75df57ff92960e7f90493d95d9dfb9) ) + ROM_LOAD("mpr-16989.5", 0x200000, 0x200000, CRC(1b616b31) SHA1(35bd2bfd08514ba6f235cda2605c171cd51fd78e) ) + + MODEL2_CPU_BOARD +ROM_END + +ROM_START( powsled ) /* Power Sled Revision A, Model 2B, ROM board ID# 834-12969 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19470a.15", 0x000000, 0x080000, CRC(8f28cc09) SHA1(2b2baa9d7b4a8fc691a826eb7f47119cb59501b3) ) + ROM_LOAD32_WORD("epr-19471a.16", 0x000002, 0x080000, CRC(01a013e3) SHA1(726d0407f61756969e194008a5fc13f3467cbf24) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("fpr-19468.11", 0x0000000, 0x400000, CRC(56fae4e2) SHA1(795db62467eb1cb5b375e05bf168573baacfd657) ) + ROM_LOAD32_WORD("fpr-19469.12", 0x0000002, 0x400000, CRC(5579c922) SHA1(d2bd10adf959e4e648f2f51a1a0463e077fa9c60) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("fpr-19455.17", 0x000000, 0x400000, CRC(165ee345) SHA1(2cfd3da4f90fcae8a6d2802976ed0ea5abc7df2f) ) + ROM_LOAD32_WORD("fpr-19456.21", 0x000002, 0x400000, CRC(c3b2e2c5) SHA1(6dcd173726395fd0f115196470063bfb7c6891b8) ) + + ROM_REGION( 0x800000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("fpr-19458.27", 0x000000, 0x400000, CRC(f24acca2) SHA1(7fd7da64e247e62aa6542e1ad1a9ea9527ac9e73) ) + ROM_LOAD32_WORD("fpr-19457.25", 0x000002, 0x400000, CRC(79d7e6fa) SHA1(906986145c23fc87ea7205d7722302104665e2bb) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-19466.31", 0x000000, 0x020000, CRC(c42892a5) SHA1(8ef761f6da3febcdf29b2d9b1bdf60ee24530f3d) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("fpr-19459.32", 0x000000, 0x400000, CRC(a424743f) SHA1(3fd370c1b3f82a8785f1985587a39d3826b46392) ) +ROM_END + +ROM_START( powsledr ) /* Power Sled Relay Revision A, Model 2B, ROM board ID# 834-12970 */ + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19472a.15", 0x000000, 0x080000, CRC(7a947eb7) SHA1(01a9fcd5055235367e4699da0037ae701c524074) ) + ROM_LOAD32_WORD("epr-19473a.16", 0x000002, 0x080000, CRC(165d77ae) SHA1(129cd1b8b5d2a2f4e59300166c739ef48699d444) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("fpr-19468.11", 0x0000000, 0x400000, CRC(56fae4e2) SHA1(795db62467eb1cb5b375e05bf168573baacfd657) ) + ROM_LOAD32_WORD("fpr-19469.12", 0x0000002, 0x400000, CRC(5579c922) SHA1(d2bd10adf959e4e648f2f51a1a0463e077fa9c60) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("fpr-19455.17", 0x000000, 0x400000, CRC(165ee345) SHA1(2cfd3da4f90fcae8a6d2802976ed0ea5abc7df2f) ) + ROM_LOAD32_WORD("fpr-19456.21", 0x000002, 0x400000, CRC(c3b2e2c5) SHA1(6dcd173726395fd0f115196470063bfb7c6891b8) ) + + ROM_REGION( 0x800000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("fpr-19458.27", 0x000000, 0x400000, CRC(f24acca2) SHA1(7fd7da64e247e62aa6542e1ad1a9ea9527ac9e73) ) + ROM_LOAD32_WORD("fpr-19457.25", 0x000002, 0x400000, CRC(79d7e6fa) SHA1(906986145c23fc87ea7205d7722302104665e2bb) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-19467.31", 0x000000, 0x020000, CRC(5e8b9763) SHA1(54c3671c74bb16c8b447e9cae9c49b6d05b27a3e) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("fpr-19460.32", 0x000000, 0x400000, CRC(456967cc) SHA1(b81ae04f6cffc2db41f946c10cb80edcdba5779a) ) + ROM_LOAD16_WORD_SWAP("fpr-19461.34", 0x400000, 0x400000, CRC(7b91d65b) SHA1(3768f134fc9e54966e683cc4b9616d704cb9c49d) ) +ROM_END + +ROM_START( powsledm ) // Main unit is not dumped, temporary we use relay dump plus patches in driver init + ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program + ROM_LOAD32_WORD("epr-19472a.15", 0x000000, 0x080000, CRC(7a947eb7) SHA1(01a9fcd5055235367e4699da0037ae701c524074) ) + ROM_LOAD32_WORD("epr-19473a.16", 0x000002, 0x080000, CRC(165d77ae) SHA1(129cd1b8b5d2a2f4e59300166c739ef48699d444) ) + + ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data + ROM_LOAD32_WORD("fpr-19468.11", 0x0000000, 0x400000, CRC(56fae4e2) SHA1(795db62467eb1cb5b375e05bf168573baacfd657) ) + ROM_LOAD32_WORD("fpr-19469.12", 0x0000002, 0x400000, CRC(5579c922) SHA1(d2bd10adf959e4e648f2f51a1a0463e077fa9c60) ) + + ROM_REGION( 0x1000000, "polygons", 0 ) // Models + ROM_LOAD32_WORD("fpr-19455.17", 0x000000, 0x400000, CRC(165ee345) SHA1(2cfd3da4f90fcae8a6d2802976ed0ea5abc7df2f) ) + ROM_LOAD32_WORD("fpr-19456.21", 0x000002, 0x400000, CRC(c3b2e2c5) SHA1(6dcd173726395fd0f115196470063bfb7c6891b8) ) + + ROM_REGION( 0x800000, "textures", 0 ) // Textures + ROM_LOAD32_WORD("fpr-19458.27", 0x000000, 0x400000, CRC(f24acca2) SHA1(7fd7da64e247e62aa6542e1ad1a9ea9527ac9e73) ) + ROM_LOAD32_WORD("fpr-19457.25", 0x000002, 0x400000, CRC(79d7e6fa) SHA1(906986145c23fc87ea7205d7722302104665e2bb) ) + + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) + + ROM_REGION( 0x080000, "audiocpu", 0 ) // Sound program + ROM_LOAD16_WORD_SWAP("epr-19467.31", 0x000000, 0x020000, CRC(5e8b9763) SHA1(54c3671c74bb16c8b447e9cae9c49b6d05b27a3e) ) + + ROM_REGION16_BE( 0x800000, "samples", 0 ) // Samples + ROM_LOAD16_WORD_SWAP("fpr-19460.32", 0x000000, 0x400000, CRC(456967cc) SHA1(b81ae04f6cffc2db41f946c10cb80edcdba5779a) ) + ROM_LOAD16_WORD_SWAP("fpr-19461.34", 0x400000, 0x400000, CRC(7b91d65b) SHA1(3768f134fc9e54966e683cc4b9616d704cb9c49d) ) +ROM_END + + +void model2_state::init_pltkids() +{ + // fix bug in program: it destroys the interrupt table and never fixes it + uint32_t *ROM = (uint32_t *)memregion("maincpu")->base(); + ROM[0x730/4] = 0x08000004; +} + +void model2_state::init_zerogun() +{ + // fix bug in program: it destroys the interrupt table and never fixes it + uint32_t *ROM = (uint32_t *)memregion("maincpu")->base(); + ROM[0x700/4] = 0x08000004; +} + +void model2_state::init_sgt24h() +{ + uint32_t *ROM = (uint32_t *)memregion("maincpu")->base(); + ROM[0x56578/4] = 0x08000004; + //ROM[0x5b3e8/4] = 0x08000004; +} + +void model2_state::init_powsledm () +{ + u8 *ROM = (u8 *)memregion("maincpu")->base(); + ROM[0x1571C] = 0x01; // Main mode + ROM[0x1584C] = 0x89; // set node ID 0x200 = main + ROM[0x1585D] = 0xFD; // inverted node ID +} + +READ32_MEMBER(model2_state::doa_prot_r) +{ + // doa only reads 16-bits at a time, while STV reads 32-bits + uint32 ret = 0; + + if (mem_mask&0xffff0000) ret |= (m_0229crypt->data_r(space,0,0xffff)<<16); + if (mem_mask&0x0000ffff) ret |= m_0229crypt->data_r(space,0,0xffff); + + return ret; +} + +READ32_MEMBER(model2_state::doa_unk_r) +{ + uint32_t retval = 0; + + // this actually looks a busy status flag + m_prot_a = !m_prot_a; + if (m_prot_a) + retval = 0xffff; + else + retval = 0xfff0; + + return retval; +} + +void model2_state::sega_0229_map(address_map &map) +{ + // view the protection device has into RAM, this might need endian swapping + map(0x000000, 0x007fff).ram().share("protram0229"); +} + +/* common map for 0229 protection */ +void model2_state::model2_0229_mem(address_map &map) +{ + // the addresses here suggest this is only connected to a 0x8000 byte window, not 0x80000 like ST-V + map(0x01d80000, 0x01d87fff).ram().share("protram0229"); + map(0x01d87ff0, 0x01d87ff3).w(m_0229crypt, FUNC(sega_315_5838_comp_device::srcaddr_w)); + map(0x01d87ff4, 0x01d87ff7).w(m_0229crypt, FUNC(sega_315_5838_comp_device::data_w_doa)); + map(0x01d87ff8, 0x01d87ffb).r(FUNC(model2_state::doa_prot_r)); + + // is this protection related? it's in the same ram range but other games with the device don't use the address for any kind of status doesn't access the device otherwise? + map(0x01d8400c, 0x01d8400f).r(FUNC(model2_state::doa_unk_r)); +} + +void model2_state::init_doa() +{ + uint32_t *ROM = (uint32_t *)memregion("maincpu")->base(); + ROM[0x630 / 4] = 0x08000004; + ROM[0x808 / 4] = 0x08000004; + + m_0229crypt->set_hack_mode(sega_315_5838_comp_device::HACK_MODE_DOA); +} + +// Model 2 (TGPs, Model 1 sound board) +GAME( 1994, daytona, 0, daytona, daytona, model2o_state, empty_init, ROT0, "Sega", "Daytona USA (Japan, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, daytonase, daytona, daytona, daytona, model2o_state, empty_init, ROT0, "Sega", "Daytona USA Special Edition (Japan, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1993, daytona93, daytona, daytona, daytona, model2o_state, empty_init, ROT0, "Sega", "Daytona USA (Japan)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, daytonas, daytona, daytona, daytona, model2o_state, empty_init, ROT0, "Sega", "Daytona USA (With Saturn Adverts)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994?,daytonat, daytona, daytona, daytona, model2o_state, empty_init, ROT0, "hack (Kyle Hodgetts)", "Daytona USA (Turbo hack, set 1)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994?,daytonata, daytona, daytona, daytona, model2o_state, empty_init, ROT0, "hack (Kyle Hodgetts)", "Daytona USA (Turbo hack, set 2)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 2001, daytonam, daytona, daytona_maxx, daytona, model2o_maxx_state, empty_init, ROT0, "hack (Kyle Hodgetts)", "Daytona USA (To The MAXX)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 2003, daytonagtx, daytona, daytona_gtx, daytona, model2o_gtx_state, empty_init, ROT0, "hack (Kyle Hodgetts)", "Daytona USA (GTX 2004 Edition)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, desert, 0, desert, desert, model2o_state, empty_init, ROT0, "Sega / Martin Marietta", "Desert Tank", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, vcop, 0, vcop, vcop, model2o_state, empty_init, ROT0, "Sega", "Virtua Cop (Revision B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, vcopa, vcop, vcop, vcop, model2o_state, empty_init, ROT0, "Sega", "Virtua Cop (Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) + +// Model 2A-CRX (TGPs, SCSP sound board) +GAME( 1994, vf2, 0, model2a, vf2, model2a_state, empty_init, ROT0, "Sega", "Virtua Fighter 2 (Version 2.1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +GAME( 1994, vf2b, vf2, model2a, vf2, model2a_state, empty_init, ROT0, "Sega", "Virtua Fighter 2 (Revision B)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +GAME( 1994, vf2a, vf2, model2a, vf2, model2a_state, empty_init, ROT0, "Sega", "Virtua Fighter 2 (Revision A)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +GAME( 1994, vf2o, vf2, model2a, vf2, model2a_state, empty_init, ROT0, "Sega", "Virtua Fighter 2", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +GAME( 1995, manxtt, 0, manxttdx, manxtt, model2a_state, empty_init, ROT0, "Sega", "Manx TT Superbike - DX (Revision D)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, manxttc, 0, manxtt, manxtt, model2a_state, empty_init, ROT0, "Sega", "Manx TT Superbike - Twin (Revision C)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, srallyc, 0, srallyc, srallyc, model2a_state, empty_init, ROT0, "Sega", "Sega Rally Championship - Twin/DX (Revision C)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, srallycb, srallyc, srallyc, srallyc, model2a_state, empty_init, ROT0, "Sega", "Sega Rally Championship - Twin/DX (Revision B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, srallycc, srallyc, srallyc, srallyc, model2a_state, empty_init, ROT0, "Sega", "Sega Rally Championship - Twin/DX (Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, srallycdx, srallyc, srallyc, srallyc, model2a_state, empty_init, ROT0, "Sega", "Sega Rally Championship - DX (Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, srallycdxa,srallyc, srallyc, srallyc, model2a_state, empty_init, ROT0, "Sega", "Sega Rally Championship - DX", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, vcop2, 0, vcop2, vcop2, model2a_state, empty_init, ROT0, "Sega", "Virtua Cop 2", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, skytargt, 0, skytargt, skytargt, model2a_state, empty_init, ROT0, "Sega", "Sky Target", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, doaa, doa, model2a_0229, doa, model2a_state, init_doa, ROT0, "Sega", "Dead or Alive (Model 2A, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, zeroguna, zerogun, zeroguna, zerogun, model2a_state, init_zerogun, ROT0, "Psikyo", "Zero Gunner (Export, Model 2A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, zerogunaj, zerogun, zeroguna, zerogun, model2a_state, init_zerogun, ROT0, "Psikyo", "Zero Gunner (Japan, Model 2A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, motoraid, 0, manxtt, motoraid, model2a_state, empty_init, ROT0, "Sega", "Motor Raid - Twin", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +GAME( 1997, motoraiddx,motoraid, manxtt, motoraid, model2a_state, empty_init, ROT0, "Sega", "Motor Raid - Twin/DX", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1998, dynamcop, 0, model2a_5881, dynamcop, model2a_state, empty_init, ROT0, "Sega", "Dynamite Cop (Export, Model 2A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1998, dyndeka2, dynamcop, model2a_5881, dynamcop, model2a_state, empty_init, ROT0, "Sega", "Dynamite Deka 2 (Japan, Model 2A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1998, pltkidsa, pltkids, model2a_5881, pltkids, model2a_state, init_pltkids, ROT0, "Psikyo", "Pilot Kids (Model 2A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) + +// Model 2B-CRX (SHARC, SCSP sound board) +GAME( 1994, rchase2, 0, rchase2, rchase2, model2b_state, empty_init, ROT0, "Sega", "Rail Chase 2 (Revision A)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND ) +GAME( 1994, vstriker, 0, model2b, vstriker, model2b_state, empty_init, ROT0, "Sega", "Virtua Striker (Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, vstrikero, vstriker, model2b, vstriker, model2b_state, empty_init, ROT0, "Sega", "Virtua Striker", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, fvipers, 0, model2b, vf2, model2b_state, empty_init, ROT0, "Sega", "Fighting Vipers (Revision D)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, fvipersb, fvipers, model2b, vf2, model2b_state, empty_init, ROT0, "Sega", "Fighting Vipers (Revision B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, gunblade, 0, gunblade, gunblade, model2b_state, empty_init, ROT0, "Sega", "Gunblade NY (Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, indy500, 0, indy500, indy500, model2b_state, empty_init, ROT0, "Sega", "INDY 500 Twin (Revision A, Newer)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, indy500d, indy500, indy500, indy500, model2b_state, empty_init, ROT0, "Sega", "INDY 500 Deluxe (Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, indy500to, indy500, indy500, indy500, model2b_state, empty_init, ROT0, "Sega", "INDY 500 Twin (Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, von, 0, model2b, von, model2b_state, empty_init, ROT0, "Sega", "Cyber Troopers Virtual-On (USA, Revision B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, vonj, von, model2b, von, model2b_state, empty_init, ROT0, "Sega", "Cyber Troopers Virtual-On (Japan, Revision B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, vonr, von, model2b, von, model2b_state, empty_init, ROT0, "Sega", "Cyber Troopers Virtual-On Relay (Japan)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, schamp, 0, model2b, schamp, model2b_state, empty_init, ROT0, "Sega", "Sonic Championship (USA)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, sfight, schamp, model2b, schamp, model2b_state, empty_init, ROT0, "Sega", "Sonic the Fighters (Japan)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, lastbrnx, 0, model2b, vf2, model2b_state, empty_init, ROT0, "Sega", "Last Bronx (Export, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, lastbrnxu, lastbrnx, model2b, vf2, model2b_state, empty_init, ROT0, "Sega", "Last Bronx (USA, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, lastbrnxj, lastbrnx, model2b, vf2, model2b_state, empty_init, ROT0, "Sega", "Last Bronx (Japan, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, doa, 0, model2b_0229, doa, model2b_state, init_doa, ROT0, "Sega", "Dead or Alive (Model 2B, Revision B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, sgt24h, 0, indy500, sgt24h, model2b_state, init_sgt24h, ROT0, "Jaleco", "Super GT 24h", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, powsled, 0, powsled, powsled, model2b_state, empty_init, ROT0, "Sega", "Power Sled (Slave, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, powsledr, powsled, powsled, powsled, model2b_state, empty_init, ROT0, "Sega", "Power Sled (Relay, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, powsledm, powsled, powsled, powsled, model2b_state, init_powsledm, ROT0, "Sega", "Power Sled (Main, hack of Relay)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, dynabb, 0, dynabb, dynabb, model2b_state, empty_init, ROT0, "Sega", "Dynamite Baseball", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, dynabb97, 0, dynabb, dynabb, model2b_state, empty_init, ROT0, "Sega", "Dynamite Baseball 97 (Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, overrevb, overrev, indy500, overrev, model2b_state, empty_init, ROT0, "Jaleco", "Over Rev (Model 2B, Revision B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, overrevba, overrev, indy500, overrev, model2b_state, empty_init, ROT0, "Jaleco", "Over Rev (Model 2B, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, zerogun, 0, zerogun, zerogun, model2b_state, init_zerogun, ROT0, "Psikyo", "Zero Gunner (Export, Model 2B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, zerogunj, zerogun, zerogun, zerogun, model2b_state, init_zerogun, ROT0, "Psikyo", "Zero Gunner (Japan, Model 2B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1998, dynamcopb, dynamcop, model2b_5881, dynamcop, model2b_state, empty_init, ROT0, "Sega", "Dynamite Cop (Export, Model 2B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1998, dyndeka2b, dynamcop, model2b_5881, dynamcop, model2b_state, empty_init, ROT0, "Sega", "Dynamite Deka 2 (Japan, Model 2B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1998, pltkids, 0, model2b_5881, pltkids, model2b_state, init_pltkids, ROT0, "Psikyo", "Pilot Kids (Model 2B, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) + +// Model 2C-CRX (TGPx4, SCSP sound board) +GAME( 1996, skisuprg, 0, skisuprg, skisuprg, model2c_state, empty_init, ROT0, "Sega", "Sega Ski Super G", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS|MACHINE_UNEMULATED_PROTECTION ) +GAME( 1996, stcc, 0, stcc, indy500, model2c_state, empty_init, ROT0, "Sega", "Sega Touring Car Championship", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, stccb, stcc, stcc, indy500, model2c_state, empty_init, ROT0, "Sega", "Sega Touring Car Championship (Revision B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, stcca, stcc, stcc, indy500, model2c_state, empty_init, ROT0, "Sega", "Sega Touring Car Championship (Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, waverunr, 0, waverunr, waverunr, model2c_state, empty_init, ROT0, "Sega", "Wave Runner (Japan, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, bel, 0, bel, bel, model2c_state, empty_init, ROT0, "Sega / EPL Productions", "Behind Enemy Lines", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, hotd, 0, hotd, hotd, model2c_state, empty_init, ROT0, "Sega", "The House of the Dead", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, hotdp, hotd, hotd, hotd, model2c_state, empty_init, ROT0, "Sega", "The House of the Dead (prototype)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, overrev, 0, overrev2c, overrev, model2c_state, empty_init, ROT0, "Jaleco", "Over Rev (Model 2C, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, rascot2, 0, model2c, model2, model2c_state, empty_init, ROT0, "Sega", "Royal Ascot II", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, segawski, 0, segawski, segawski, model2c_state, empty_init, ROT0, "Sega", "Sega Water Ski (Japan, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, topskatr, 0, topskatr, topskatr, model2c_state, empty_init, ROT0, "Sega", "Top Skater (Export, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, topskatru, topskatr, model2c, topskatr, model2c_state, empty_init, ROT0, "Sega", "Top Skater (USA, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, topskatruo,topskatr, model2c, topskatr, model2c_state, empty_init, ROT0, "Sega", "Top Skater (USA)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, topskatrj, topskatr, model2c, topskatr, model2c_state, empty_init, ROT0, "Sega", "Top Skater (Japan)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1998, dynamcopc, dynamcop, model2c_5881, dynamcop, model2c_state, empty_init, ROT0, "Sega", "Dynamite Cop (USA, Model 2C)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) diff --git a/docs/release/src/mame/includes/mhavoc.h b/docs/release/src/mame/includes/mhavoc.h new file mode 100644 index 00000000000..78b5c222efe --- /dev/null +++ b/docs/release/src/mame/includes/mhavoc.h @@ -0,0 +1,102 @@ +// license:BSD-3-Clause +// copyright-holders:Mike Appolo +/************************************************************************* + + Atari Major Havoc hardware + +*************************************************************************/ + +#include "machine/timer.h" +#include "sound/pokey.h" +#include "sound/tms5220.h" + +#define MHAVOC_CLOCK 10000000 +#define MHAVOC_CLOCK_5M (MHAVOC_CLOCK/2) +#define MHAVOC_CLOCK_2_5M (MHAVOC_CLOCK/4) +#define MHAVOC_CLOCK_1_25M (MHAVOC_CLOCK/8) +#define MHAVOC_CLOCK_625K (MHAVOC_CLOCK/16) + +#define MHAVOC_CLOCK_156K (MHAVOC_CLOCK_625K/4) +#define MHAVOC_CLOCK_5K (MHAVOC_CLOCK_625K/16/8) +#define MHAVOC_CLOCK_2_4K (MHAVOC_CLOCK_625K/16/16) + + +class mhavoc_state : public driver_device +{ +public: + mhavoc_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_zram0(*this, "zram0"), + m_zram1(*this, "zram1"), + m_alpha(*this, "alpha"), + m_gamma(*this, "gamma"), + m_pokey(*this, "pokey%u", 1U), + m_tms(*this, "tms"), + m_lamps(*this, "lamp%u", 0U) + { } + + void alphaone(machine_config &config); + void mhavoc(machine_config &config); + void mhavocrv(machine_config &config); + void mhavocpe(machine_config &config); //HBMAME + + void init_mhavocrv(); + + DECLARE_CUSTOM_INPUT_MEMBER(tms5220_r); + DECLARE_CUSTOM_INPUT_MEMBER(mhavoc_bit67_r); + DECLARE_CUSTOM_INPUT_MEMBER(gamma_rcvd_r); + DECLARE_CUSTOM_INPUT_MEMBER(gamma_xmtd_r); + DECLARE_CUSTOM_INPUT_MEMBER(alpha_rcvd_r); + DECLARE_CUSTOM_INPUT_MEMBER(alpha_xmtd_r); + DECLARE_CUSTOM_INPUT_MEMBER(clock_r); + +private: + DECLARE_READ8_MEMBER(dual_pokey_r); + DECLARE_WRITE8_MEMBER(dual_pokey_w); + DECLARE_WRITE8_MEMBER(mhavoc_alpha_irq_ack_w); + DECLARE_WRITE8_MEMBER(mhavoc_gamma_irq_ack_w); + DECLARE_WRITE8_MEMBER(mhavoc_gamma_w); + DECLARE_READ8_MEMBER(mhavoc_alpha_r); + DECLARE_WRITE8_MEMBER(mhavoc_alpha_w); + DECLARE_READ8_MEMBER(mhavoc_gamma_r); + DECLARE_WRITE8_MEMBER(mhavoc_ram_banksel_w); + DECLARE_WRITE8_MEMBER(mhavoc_rom_banksel_w); + DECLARE_WRITE8_MEMBER(mhavoc_out_0_w); + DECLARE_WRITE8_MEMBER(alphaone_out_0_w); + DECLARE_WRITE8_MEMBER(mhavoc_out_1_w); + DECLARE_WRITE8_MEMBER(mhavocrv_speech_data_w); + DECLARE_WRITE8_MEMBER(mhavocrv_speech_strobe_w); + DECLARE_READ8_MEMBER(quad_pokeyn_r); + DECLARE_WRITE8_MEMBER(quad_pokeyn_w); + + TIMER_CALLBACK_MEMBER(delayed_gamma_w); + TIMER_DEVICE_CALLBACK_MEMBER(mhavoc_cpu_irq_clock); + void alpha_map(address_map &map); + void alphaone_map(address_map &map); + void gamma_map(address_map &map); + void alphape_map(address_map &map); //HBMAME + void gammape_map(address_map &map); //HBMAME + + virtual void machine_start() override; + virtual void machine_reset() override; + + required_shared_ptr<uint8_t> m_zram0; + required_shared_ptr<uint8_t> m_zram1; + required_device<cpu_device> m_alpha; + optional_device<cpu_device> m_gamma; + optional_device_array<pokey_device, 4> m_pokey; + optional_device<tms5220_device> m_tms; + output_finder<2> m_lamps; + uint8_t m_alpha_data; + uint8_t m_alpha_rcvd; + uint8_t m_alpha_xmtd; + uint8_t m_gamma_data; + uint8_t m_gamma_rcvd; + uint8_t m_gamma_xmtd; + uint8_t m_player_1; + uint8_t m_alpha_irq_clock; + uint8_t m_alpha_irq_clock_enable; + uint8_t m_gamma_irq_clock; + uint8_t m_has_gamma_cpu; + uint8_t m_speech_write_buffer; +}; diff --git a/docs/release/src/mame/machine/mhavoc.cpp b/docs/release/src/mame/machine/mhavoc.cpp new file mode 100644 index 00000000000..0c2ab1c7893 --- /dev/null +++ b/docs/release/src/mame/machine/mhavoc.cpp @@ -0,0 +1,332 @@ +// license:BSD-3-Clause +// copyright-holders:Mike Appolo +/*************************************************************************** + + Atari Major Havoc hardware + +***************************************************************************/ + +#include "emu.h" +#include "cpu/m6502/m6502.h" +#include "includes/mhavoc.h" + + +/************************************* + * + * Interrupt handling + * + *************************************/ + +TIMER_DEVICE_CALLBACK_MEMBER(mhavoc_state::mhavoc_cpu_irq_clock) +{ + /* clock the LS161 driving the alpha CPU IRQ */ + if (m_alpha_irq_clock_enable) + { + m_alpha_irq_clock++; + if ((m_alpha_irq_clock & 0x0c) == 0x0c) + { + m_alpha->set_input_line(0, ASSERT_LINE); + m_alpha_irq_clock_enable = 0; + } + } + + /* clock the LS161 driving the gamma CPU IRQ */ + if (m_has_gamma_cpu) + { + m_gamma_irq_clock++; + m_gamma->set_input_line(0, (m_gamma_irq_clock & 0x08) ? ASSERT_LINE : CLEAR_LINE); + } +} + + +WRITE8_MEMBER(mhavoc_state::mhavoc_alpha_irq_ack_w) +{ + /* clear the line and reset the clock */ + m_alpha->set_input_line(0, CLEAR_LINE); + m_alpha_irq_clock = 0; + m_alpha_irq_clock_enable = 1; +} + + +WRITE8_MEMBER(mhavoc_state::mhavoc_gamma_irq_ack_w) +{ + /* clear the line and reset the clock */ + m_gamma->set_input_line(0, CLEAR_LINE); + m_gamma_irq_clock = 0; +} + + + +/************************************* + * + * Machine init + * + *************************************/ + +void mhavoc_state::machine_start() +{ + m_lamps.resolve(); + + save_item(NAME(m_alpha_data)); + save_item(NAME(m_alpha_rcvd)); + save_item(NAME(m_alpha_xmtd)); + save_item(NAME(m_gamma_data)); + save_item(NAME(m_gamma_rcvd)); + save_item(NAME(m_gamma_xmtd)); + save_item(NAME(m_player_1)); + save_item(NAME(m_alpha_irq_clock)); + save_item(NAME(m_alpha_irq_clock_enable)); + save_item(NAME(m_gamma_irq_clock)); + + save_item(NAME(m_speech_write_buffer)); +} + + +void mhavoc_state::machine_reset() +{ + address_space &space = m_alpha->space(AS_PROGRAM); + m_has_gamma_cpu = (m_gamma != nullptr); + + membank("bank1")->configure_entry(0, m_zram0); + membank("bank1")->configure_entry(1, m_zram1); + membank("bank2")->configure_entries(0, 8, memregion("alpha")->base() + 0x10000, 0x2000); + if (memregion("bank3")) + membank("bank3")->configure_entries(0, 4, memregion("avg")->base(), 0x2000); + + /* reset RAM/ROM banks to 0 */ + mhavoc_ram_banksel_w(space, 0, 0); + mhavoc_rom_banksel_w(space, 0, 0); + + /* reset alpha comm status */ + m_alpha_data = 0; + m_alpha_rcvd = 0; + m_alpha_xmtd = 0; + + /* reset gamma comm status */ + m_gamma_data = 0; + m_gamma_rcvd = 0; + m_gamma_xmtd = 0; + + /* reset player 1 flag */ + m_player_1 = 0; + + /* reset IRQ clock states */ + m_alpha_irq_clock = 0; + m_alpha_irq_clock_enable = 1; + m_gamma_irq_clock = 0; +} + + + +/************************************* + * + * Alpha -> gamma communications + * + *************************************/ + +TIMER_CALLBACK_MEMBER(mhavoc_state::delayed_gamma_w) +{ + /* mark the data received */ + m_gamma_rcvd = 0; + m_alpha_xmtd = 1; + m_alpha_data = param; + + /* signal with an NMI pulse */ + m_gamma->pulse_input_line(INPUT_LINE_NMI, attotime::zero); + + /* the sound CPU needs to reply in 250microseconds (according to Neil Bradley) */ + machine().scheduler().timer_set(attotime::from_usec(250), timer_expired_delegate()); +} + + +WRITE8_MEMBER(mhavoc_state::mhavoc_gamma_w) +{ + //logerror(" writing to gamma processor: %02x (%d %d)\n", data, m_gamma_rcvd, m_alpha_xmtd); + machine().scheduler().synchronize(timer_expired_delegate(FUNC(mhavoc_state::delayed_gamma_w),this), data); +} + + +READ8_MEMBER(mhavoc_state::mhavoc_alpha_r) +{ + //logerror("\t\t\t\t\treading from alpha processor: %02x (%d %d)\n", m_alpha_data, m_gamma_rcvd, m_alpha_xmtd); + m_gamma_rcvd = 1; + m_alpha_xmtd = 0; + return m_alpha_data; +} + + +/************************************* + * + * Gamma -> alpha communications + * + *************************************/ + +WRITE8_MEMBER(mhavoc_state::mhavoc_alpha_w) +{ + //logerror("\t\t\t\t\twriting to alpha processor: %02x %d %d\n", data, m_alpha_rcvd, m_gamma_xmtd); + m_alpha_rcvd = 0; + m_gamma_xmtd = 1; + m_gamma_data = data; +} + + +READ8_MEMBER(mhavoc_state::mhavoc_gamma_r) +{ + //logerror(" reading from gamma processor: %02x (%d %d)\n", m_gamma_data, m_alpha_rcvd, m_gamma_xmtd); + m_alpha_rcvd = 1; + m_gamma_xmtd = 0; + return m_gamma_data; +} + + + +/************************************* + * + * RAM/ROM banking + * + *************************************/ + +WRITE8_MEMBER(mhavoc_state::mhavoc_ram_banksel_w) +{ + membank("bank1")->set_entry(data & 1); +} + + +WRITE8_MEMBER(mhavoc_state::mhavoc_rom_banksel_w) +{ + membank("bank2")->set_entry(data & 3); +} + + + +/************************************* + * + * Input ports + * + *************************************/ + +CUSTOM_INPUT_MEMBER(mhavoc_state::tms5220_r) +{ + return m_tms->readyq_r() ? 1 : 0; +} + +CUSTOM_INPUT_MEMBER(mhavoc_state::mhavoc_bit67_r) +{ + const char *tag1 = (const char *)param; + const char *tag2 = tag1 + strlen(tag1) + 1; + return ioport(m_player_1 ? tag2 : tag1)->read() & 0x03; +} + +CUSTOM_INPUT_MEMBER(mhavoc_state::gamma_rcvd_r) +{ + /* Gamma rcvd flag */ + return m_gamma_rcvd; +} + +CUSTOM_INPUT_MEMBER(mhavoc_state::gamma_xmtd_r) +{ + /* Gamma xmtd flag */ + return m_gamma_xmtd; +} + +CUSTOM_INPUT_MEMBER(mhavoc_state::alpha_rcvd_r) +{ + /* Alpha rcvd flag */ + return (m_has_gamma_cpu && m_alpha_rcvd); +} + +CUSTOM_INPUT_MEMBER(mhavoc_state::alpha_xmtd_r) +{ + /* Alpha xmtd flag */ + return (m_has_gamma_cpu && m_alpha_xmtd); +} + +/************************************* + * + * Output ports + * + *************************************/ + +WRITE8_MEMBER(mhavoc_state::mhavoc_out_0_w) +{ + /* Bit 7 = Invert Y -- unemulated */ + /* Bit 6 = Invert X -- unemulated */ + + /* Bit 5 = Player 1 */ + m_player_1 = (data >> 5) & 1; + + /* Bit 3 = Gamma reset */ + m_gamma->set_input_line(INPUT_LINE_RESET, (data & 0x08) ? CLEAR_LINE : ASSERT_LINE); + if (!(data & 0x08)) + { + //logerror("\t\t\t\t*** resetting gamma processor. ***\n"); + m_alpha_rcvd = 0; + m_alpha_xmtd = 0; + m_gamma_rcvd = 0; + m_gamma_xmtd = 0; + } + + /* Bit 2 = Beta reset */ + /* this is the unpopulated processor in the corner of the pcb farthest from the quad pokey, not used on shipping boards */ + + /* Bit 0 = Roller light (Blinks on fatal errors) */ + m_lamps[0] = BIT(data, 0); +} + + +WRITE8_MEMBER(mhavoc_state::alphaone_out_0_w) +{ + /* Bit 5 = P2 lamp */ + m_lamps[0] = BIT(~data, 5); + + /* Bit 4 = P1 lamp */ + m_lamps[1] = BIT(~data, 4); + + /* Bit 1 = right coin counter */ + machine().bookkeeping().coin_counter_w(1, data & 0x02); + + /* Bit 0 = left coin counter */ + machine().bookkeeping().coin_counter_w(0, data & 0x01); + + //logerror("alphaone_out_0_w(%02X)\n", data); +} + + +WRITE8_MEMBER(mhavoc_state::mhavoc_out_1_w) +{ + /* Bit 1 = left coin counter */ + machine().bookkeeping().coin_counter_w(0, data & 0x02); + + /* Bit 0 = right coin counter */ + machine().bookkeeping().coin_counter_w(1, data & 0x01); +} + +/************************************* + * + * Speech access + * + *************************************/ + +WRITE8_MEMBER(mhavoc_state::mhavocrv_speech_data_w) +{ + m_speech_write_buffer = data; +} + + +WRITE8_MEMBER(mhavoc_state::mhavocrv_speech_strobe_w) +{ + m_tms->data_w(m_speech_write_buffer); +} + +/************************************* + * + * Driver-specific init + * + *************************************/ + +void mhavoc_state::init_mhavocrv() +{ + // For Return to Vax, add support for the normally-unused speech module. + m_gamma->space(AS_PROGRAM).install_write_handler(0x5800, 0x5800, write8_delegate(FUNC(mhavoc_state::mhavocrv_speech_data_w),this)); + m_gamma->space(AS_PROGRAM).install_write_handler(0x5900, 0x5900, write8_delegate(FUNC(mhavoc_state::mhavocrv_speech_strobe_w),this)); +} diff --git a/docs/release/src/mame/video/decbac06.cpp b/docs/release/src/mame/video/decbac06.cpp new file mode 100644 index 00000000000..ad1ab7a7ab6 --- /dev/null +++ b/docs/release/src/mame/video/decbac06.cpp @@ -0,0 +1,632 @@ +// license:BSD-3-Clause +// copyright-holders:Bryan McPhail, David Haywood +/* + Deco BAC06 tilemap generator: + + this a direct relative of the later chip implemented in deco16ic.cpp + we could implement this as either an 8-bit or a 16-bit chip, for now + I'm using the 16-bit implementation from dec0.cpp + + used by: + + actfancr.cpp + dec0.cpp + dec8.cpp (oscar, cobracom, ghostb) + madmotor.cpp + stadhero.cpp + pcktgal.cpp + + Notes (from dec0.cpp) + + All games contain three BAC06 background generator chips, usual (software) +configuration is 2 chips of 16*16 tiles, 1 of 8*8. + + Playfield control registers: + bank 0: + 0: + bit 0 (0x1) set = 8*8 tiles, else 16*16 tiles + Bit 1 (0x2) set = row major tile layout, else column major* + bit 2 (0x4) set enables rowscroll + bit 3 (0x8) set enables colscroll + bit 7 (0x80) set in playfield 1 is reverse screen (set via dip-switch) + bit 7 (0x80) in other playfields unknown + 2: unknown (00 in bg, 03 in fg+text - maybe controls pf transparency?) + 4: unknown (always 00) [Used to access 2nd bank of tiles in Stadium Hero) + 6: playfield shape: 00 = 4x1, 01 = 2x2, 02 = 1x4 (low 4 bits only) + + bank 1: + 0: horizontal scroll + 2: vertical scroll + 4: colscroll shifter (low 4 bits, top 4 bits do nothing) + 6: rowscroll shifter (low 4 bits, top 4 bits do nothing) + + Row & column scroll can be applied simultaneously or by themselves. + The shift register controls the granularity of the scroll offsets + (more details given later). + + * Bandit is the only game known to use column major tile layout, when in this + mode X scrolling is also inverted, and tile character data is flipped on X. + +Playfield priority (Bad Dudes, etc): + In the bottommost playfield, pens 8-15 can have priority over the next playfield. + In that next playfield, pens 8-15 can have priority over sprites. + +Bit 0: Playfield inversion +Bit 1: Enable playfield mixing (for palettes 8-15 only) +Bit 2: Enable playfield/sprite mixing (for palettes 8-15 only) + +Priority word (Midres): + Bit 0 set = Playfield 3 drawn over Playfield 2 + ~ = Playfield 2 drawn over Playfield 3 + Bit 1 set = Sprites are drawn inbetween playfields + ~ = Sprites are on top of playfields + Bit 2 + Bit 3 set = ... + + Note that priority mixing is handled outside of the BAC-06 chip. + +*/ + +#include "emu.h" +#include "decbac06.h" + +#include <algorithm> + +DEFINE_DEVICE_TYPE(DECO_BAC06, deco_bac06_device, "deco_back06", "DECO BAC06 Tilemap") + +deco_bac06_device::deco_bac06_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, DECO_BAC06, tag, owner, clock) + , m_pf_data(nullptr) + , m_pf_rowscroll(nullptr) + , m_pf_colscroll(nullptr) + , m_tile_region_8(0) + , m_tile_region_16(0) + , m_supports_8x8(true) + , m_supports_16x16(true) + , m_supports_rc_scroll(true) + , m_gfxcolmask(0) + , m_rambank(0) + , m_gfxregion8x8(0) + , m_gfxregion16x16(0) + , m_wide(0) + , m_bppmult_8x8(0) + , m_bppmask_8x8(0) + , m_bppmult_16x16(0) + , m_bppmask_16x16(0) + , m_gfxdecode(*this, finder_base::DUMMY_TAG) +{ + std::fill(std::begin(m_pf_control_0), std::end(m_pf_control_0), 0); + std::fill(std::begin(m_pf_control_1), std::end(m_pf_control_1), 0); +} + +void deco_bac06_device::device_start() +{ + if(!m_gfxdecode->started()) + throw device_missing_dependencies(); + + m_pf_data = make_unique_clear<u16[]>(0x4000 / 2); // 0x2000 is the maximum needed, some games / chip setups map less and mirror - stadium hero banks this to 0x4000?! + m_pf_rowscroll = make_unique_clear<u16[]>(0x2000 / 2); + m_pf_colscroll = make_unique_clear<u16[]>(0x2000 / 2); + + create_tilemaps(m_gfxregion8x8, m_gfxregion16x16); + m_gfxcolmask = 0x0f; + + m_bppmult_8x8 = m_gfxdecode->gfx(m_gfxregion8x8)->granularity(); + m_bppmask_8x8 = m_gfxdecode->gfx(m_gfxregion8x8)->depth() - 1; + + m_bppmult_16x16 = m_gfxdecode->gfx(m_gfxregion16x16)->granularity(); + m_bppmask_16x16 = m_gfxdecode->gfx(m_gfxregion16x16)->depth() - 1; + + m_rambank = 0; + m_flip_screen = false; + + save_pointer(NAME(m_pf_data), 0x4000 / 2); + save_pointer(NAME(m_pf_rowscroll), 0x2000 / 2); + save_pointer(NAME(m_pf_colscroll), 0x2000 / 2); + save_item(NAME(m_pf_control_0)); + save_item(NAME(m_pf_control_1)); + save_item(NAME(m_gfxcolmask)); + save_item(NAME(m_rambank)); + save_item(NAME(m_flip_screen)); +} + +void deco_bac06_device::device_reset() +{ +} + +void deco_bac06_device::set_flip_screen(bool flip) +{ + if (m_flip_screen != flip) + { + m_flip_screen = flip; + for (int i = 0; i < 3; i++) + { + m_pf8x8_tilemap[i]->set_flip(flip ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0); + m_pf16x16_tilemap[i]->set_flip(flip ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0); + } + } +} + +TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape0_scan) +{ +// HBMAME fix for decodemo 2019-02-27 +// if ((m_pf_control_0[0]&2)==0) +// { +// int col_mask = num_cols - 1; +// return (row & 0xf) + ((col_mask - (col & col_mask)) << 4); +// } + return (col & 0xf) + ((row & 0xf) << 4) + ((col & 0x1f0) << 4); +} + +TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape1_scan) +{ + //if (m_pf_control_0[0] & 2) // Needs testing on real hardware, not used by any game + // return (row & 0xf) + ((col & 0x1f) << 4) + ((col & 0xf0) << 5); + return (col & 0xf) + ((row & 0x1f) << 4) + ((col & 0xf0) << 5); +} + +TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape2_scan) +{ + //if (m_pf_control_0[0] & 2) // Needs testing on real hardware, not used by any game + // return (col & 0xf) + ((row & 0x3f) << 4) + ((row & 0x70) << 6); + return (col & 0xf) + ((row & 0x3f) << 4) + ((col & 0x70) << 6); +} + +TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape0_8x8_scan) +{ + //if (m_pf_control_0[0] & 2) // Needs testing on real hardware, not used by any game + // return (col & 0x1f) + ((row & 0x1f) << 5) + ((row & 0x60) << 5); + return (col & 0x1f) + ((row & 0x1f) << 5) + ((col & 0x60) << 5); +} + +TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape1_8x8_scan) +{ + //if (m_pf_control_0[0] & 2) // Needs testing on real hardware, not used by any game + // return (row & 0x1f) + ((col & 0x1f) << 5) + ((col & 0x20) << 5) + ((row & 0x20) << 6); + return (col & 0x1f) + ((row & 0x1f) << 5) + ((row & 0x20) << 5) + ((col & 0x20) << 6); +} + +TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape2_8x8_scan) +{ + //if (m_pf_control_0[0] & 2) // Needs testing on real hardware, not used by any game + // return (row & 0x1f) + ((col & 0x7f) << 5); + return (col & 0x1f) + ((row & 0x7f) << 5); +} + +TILE_GET_INFO_MEMBER(deco_bac06_device::get_pf8x8_tile_info) +{ + if (m_rambank & 1) tile_index += 0x1000; + int tile = m_pf_data[tile_index]; + int colourpri = (tile >> 12); + //int flags=(m_pf_control_0[0]&2) ? 0 : TILE_FLIPX; // HBMAME fix for decodemo 2019-02-27 - TILE_GET_INFO_MEMBER always returns 0 for m_pf_control_0[0] regardless of its real value + SET_TILE_INFO_MEMBER(m_tile_region_8,tile&0xfff,0,0); // HBMAME fix for decodemo 2019-02-27 + tileinfo.category = colourpri; +} + +TILE_GET_INFO_MEMBER(deco_bac06_device::get_pf16x16_tile_info) +{ + if (m_rambank & 1) tile_index += 0x1000; + int tile = m_pf_data[tile_index]; + int colourpri = (tile >> 12); + //int flags=(m_pf_control_0[0]&2) ? 0 : TILE_FLIPX; // HBMAME fix for decodemo 2019-02-27 - TILE_GET_INFO_MEMBER always returns 0 for m_pf_control_0[0] regardless of its real value + SET_TILE_INFO_MEMBER(m_tile_region_16,tile&0xfff,0,0); // HBMAME fix for decodemo 2019-02-27 + tileinfo.category = colourpri; +} + +void deco_bac06_device::create_tilemaps(int region8x8, int region16x16) +{ + m_tile_region_8 = region8x8; + m_tile_region_16 = region16x16; + + m_pf8x8_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf8x8_tile_info),this),tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape0_8x8_scan),this), 8, 8,128, 32); + m_pf8x8_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf8x8_tile_info),this),tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape1_8x8_scan),this), 8, 8, 64, 64); + m_pf8x8_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf8x8_tile_info),this),tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape2_8x8_scan),this), 8, 8, 32,128); + + if (m_wide == 2) + { + m_pf16x16_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf16x16_tile_info),this), tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape0_scan),this), 16, 16, 256, 16); + m_pf16x16_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf16x16_tile_info),this), tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape1_scan),this), 16, 16, 128, 32); + m_pf16x16_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf16x16_tile_info),this), tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape2_scan),this), 16, 16, 64, 64); + } + else if (m_wide == 1) + { + m_pf16x16_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf16x16_tile_info),this), tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape0_scan),this), 16, 16, 128, 16); + m_pf16x16_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf16x16_tile_info),this), tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape1_scan),this), 16, 16, 64, 32); + m_pf16x16_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf16x16_tile_info),this), tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape2_scan),this), 16, 16, 32, 64); + } + else + { + m_pf16x16_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf16x16_tile_info),this),tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape0_scan),this), 16, 16, 64, 16); + m_pf16x16_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf16x16_tile_info),this),tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape1_scan),this), 16, 16, 32, 32); + m_pf16x16_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(deco_bac06_device::get_pf16x16_tile_info),this),tilemap_mapper_delegate(FUNC(deco_bac06_device::tile_shape2_scan),this), 16, 16, 16, 64); + } +} + +void deco_bac06_device::custom_tilemap_draw(bitmap_ind16 &bitmap, + bitmap_ind8 &primap, + const rectangle &cliprect, + tilemap_t *tilemap_ptr, + const u16 *rowscroll_ptr, + const u16 *colscroll_ptr, + const u16 *control0, + const u16 *control1, + int flags, + u16 penmask, + u16 pencondition, + u16 colprimask, + u16 colpricondition, + u8 bppmult, + u8 bppmask, + u8 pri, + u8 pmask) +{ + const bitmap_ind16 &src_bitmap = tilemap_ptr->pixmap(); + const bitmap_ind8 &flags_bitmap = tilemap_ptr->flagsmap(); + int column_offset = 0, src_x = 0, src_y = 0; + u32 scrollx = 0; + u32 scrolly = 0; + + if (control1) + { + if (control0 && (control0[0] & 2) == 0) // Use of column major mode inverts scroll direction + scrollx = -control1[0] - 0x100; + else + scrollx = control1[0]; + scrollx = control1[0]; // HBMAME fix for decodemo 2019-02-27 + scrolly = control1[1]; + } + + int row_scroll_enabled = 0; + int col_scroll_enabled = 0; + + if (m_supports_rc_scroll) + { + if (control0) + { + row_scroll_enabled = (rowscroll_ptr && (control0[0] & 0x4)); + col_scroll_enabled = (colscroll_ptr && (control0[0] & 0x8)); + } + } + + const int width_mask = src_bitmap.width() - 1; + const int height_mask = src_bitmap.height() - 1; + + /* Column scroll & row scroll may per applied per pixel, there are + shift registers for each which control the granularity of the row/col + offset (down to per line level for row, and per 8 lines for column). + + Nb: The row & col selectors are _not_ affected by the shape of the + playfield (ie, 256*1024, 512*512 or 1024*256). So even if the tilemap + width is only 256, 'src_x' should not wrap at 256 in the code below (to + do so would mean the top half of row RAM would never be accessed which + is incorrect). + + Nb2: Real hardware exhibits a strange bug with column scroll on 'mode 2' + (256*1024) - the first column has a strange additional offset, but + curiously the first 'wrap' (at scroll offset 256) does not have this offset, + it is displayed as expected. The bug is confimed to only affect this mode, + the other two modes work as expected. This bug is not emulated, as it + doesn't affect any games. + */ + + if (m_flip_screen) + src_y = (src_bitmap.height() - 256) - scrolly; + else + src_y = scrolly; + + src_y += cliprect.top(); + for (int y = cliprect.top(); y <= cliprect.bottom(); y++) + { + u16 *dstpix = &bitmap.pix16(y); + u8 *dstpri = &primap.pix8(y); + if (row_scroll_enabled) + src_x=scrollx + rowscroll_ptr[(src_y >> (control1[3] & 0xf)) & (0x1ff >> (control1[3] & 0xf))]; + else + src_x=scrollx; + + if (m_flip_screen) + src_x=(src_bitmap.width() - 256) - src_x; + + src_x += cliprect.left(); + for (int x = cliprect.left(); x <= cliprect.right(); x++) + { + if (col_scroll_enabled) + column_offset=colscroll_ptr[((src_x >> 3) >> (control1[2] & 0xf)) & (0x3f >> (control1[2] & 0xf))]; + + const u16 p = src_bitmap.pix16((src_y + column_offset) & height_mask, src_x & width_mask); + const u8 colpri = flags_bitmap.pix8((src_y + column_offset) & height_mask, src_x & width_mask) & 0xf; + + src_x++; + if ((flags & TILEMAP_DRAW_OPAQUE) || (p & bppmask)) + { + if ((p & penmask) == pencondition) + if((colpri & colprimask) == colpricondition) + { + dstpix[x] = p + (colpri & m_gfxcolmask) * bppmult; + dstpri[x] = (dstpri[x] & pmask) | pri; + } + } + } + src_y++; + } +} + +void deco_bac06_device::deco_bac06_pf_draw(screen_device &screen,bitmap_ind16 &bitmap,const rectangle &cliprect,int flags,u16 penmask, u16 pencondition,u16 colprimask, u16 colpricondition, u8 pri, u8 primask) +{ + tilemap_t* tm = nullptr; + u8 bppmult = 0, bppmask = 0; + + int tm_dimensions = m_pf_control_0[3] & 0x3; + if (tm_dimensions == 3) tm_dimensions = 1; // 3 is invalid / the same as 1? + + if (m_pf_control_0[0] & 0x1) // is 8x8 tiles mode selected? + { + if (m_supports_8x8) + { + tm = m_pf8x8_tilemap[tm_dimensions]; + bppmult = m_bppmult_8x8; + bppmask = m_bppmask_8x8; + } + else if (m_supports_16x16) + { + tm = m_pf16x16_tilemap[tm_dimensions]; + bppmult = m_bppmult_16x16; + bppmask = m_bppmask_16x16; + } + } + else // 16x16 tiles mode is selected + { + if (m_supports_16x16) + { + tm = m_pf16x16_tilemap[tm_dimensions]; + bppmult = m_bppmult_16x16; + bppmask = m_bppmask_16x16; + } + else if (m_supports_8x8) + { + tm = m_pf8x8_tilemap[tm_dimensions]; + bppmult = m_bppmult_8x8; + bppmask = m_bppmask_8x8; + } + } + + if (tm) + custom_tilemap_draw(bitmap,screen.priority(),cliprect,tm,m_pf_rowscroll.get(),m_pf_colscroll.get(),m_pf_control_0,m_pf_control_1,flags, penmask, pencondition, colprimask, colpricondition, bppmult, bppmask, pri, primask); +} + +// used for pocket gal bootleg, which doesn't set registers properly and simply expects a fixed size tilemap. +void deco_bac06_device::deco_bac06_pf_draw_bootleg(screen_device &screen,bitmap_ind16 &bitmap,const rectangle &cliprect,int flags, int mode, int type, u8 pri, u8 primask) +{ + tilemap_t* tm = nullptr; + u8 bppmult, bppmask; + if (!mode) + { + tm = m_pf8x8_tilemap[type]; + bppmult = m_bppmult_8x8; + bppmask = m_bppmask_8x8; + } + else + { + tm = m_pf16x16_tilemap[type]; + bppmult = m_bppmult_16x16; + bppmask = m_bppmask_16x16; + } + + custom_tilemap_draw(bitmap,screen.priority(),cliprect,tm,m_pf_rowscroll.get(),m_pf_colscroll.get(),nullptr,nullptr,flags, 0, 0, 0, 0, bppmult, bppmask, pri, primask); +} + + + +void deco_bac06_device::pf_control_0_w(offs_t offset, u16 data, u16 mem_mask) +{ + int old_register0 = m_pf_control_0[0]; + + offset &= 3; + + COMBINE_DATA(&m_pf_control_0[offset]); + + bool dirty_all = false; + if (offset == 0) + { + if ((old_register0 & 2) != (m_pf_control_0[offset] & 2)) + { + // The tilemap has changed from row major to column major or vice versa. + // Must force an update of the mapping. + for (int i = 0; i < 3; i++) + { + m_pf8x8_tilemap[i]->mark_mapping_dirty(); + m_pf16x16_tilemap[i]->mark_mapping_dirty(); + } + dirty_all = true; + } + } + if (offset == 2) + { + int newbank = m_pf_control_0[offset] & 1; + if ((newbank & 1) != (m_rambank & 1)) + { + // I don't know WHY Stadium Hero uses this as a bank but the RAM test expects it.. + // I'm curious as to if anything else sets it tho + if (strcmp(machine().system().name,"stadhero")) + logerror("tilemap ram bank change to %02x\n", newbank & 1); + + dirty_all = true; + m_rambank = newbank & 1; + } + } + + if (dirty_all) + { + for (int i = 0; i < 3; i++) + { + m_pf8x8_tilemap[i]->mark_all_dirty(); + m_pf16x16_tilemap[i]->mark_all_dirty(); + } + } +} + +u16 deco_bac06_device::pf_control_1_r(offs_t offset) +{ + offset &= 7; + return m_pf_control_1[offset]; +} + +void deco_bac06_device::pf_control_1_w(offs_t offset, u16 data, u16 mem_mask) +{ + offset &= 7; + COMBINE_DATA(&m_pf_control_1[offset]); +} + +void deco_bac06_device::pf_data_w(offs_t offset, u16 data, u16 mem_mask) +{ + if (m_rambank & 1) offset += 0x1000; + + COMBINE_DATA(&m_pf_data[offset]); + + for (int i = 0; i < 3; i++) + { + m_pf8x8_tilemap[i]->mark_tile_dirty(offset); + m_pf16x16_tilemap[i]->mark_tile_dirty(offset); + } +} + +u16 deco_bac06_device::pf_data_r(offs_t offset) +{ + if (m_rambank & 1) offset += 0x1000; + + return m_pf_data[offset]; +} + +void deco_bac06_device::pf_data_8bit_w(offs_t offset, u8 data) +{ + if (offset & 1) + pf_data_w(offset / 2, data, 0x00ff); + else + pf_data_w(offset / 2, data << 8, 0xff00); +} + +u8 deco_bac06_device::pf_data_8bit_r(offs_t offset) +{ + if (offset & 1) /* MSB */ + return pf_data_r(offset / 2); + else + return pf_data_r(offset / 2)>>8; +} + +void deco_bac06_device::pf_rowscroll_w(offs_t offset, u16 data, u16 mem_mask) +{ + COMBINE_DATA(&m_pf_rowscroll[offset]); +} + +void deco_bac06_device::pf_colscroll_w(offs_t offset, u16 data, u16 mem_mask) +{ + COMBINE_DATA(&m_pf_colscroll[offset]); +} + +u16 deco_bac06_device::pf_rowscroll_r(offs_t offset) +{ + return m_pf_rowscroll[offset]; +} + +u16 deco_bac06_device::pf_colscroll_r(offs_t offset) +{ + return m_pf_colscroll[offset]; +} + +/* used by dec8.cpp */ +void deco_bac06_device::pf_control0_8bit_w(offs_t offset, u8 data) +{ + if (offset & 1) + pf_control_0_w(offset / 2, data, 0x00ff); // oscar (mirrors?) + else + pf_control_0_w(offset / 2, data, 0x00ff); +} + +/* used by dec8.cpp */ +u8 deco_bac06_device::pf_control1_8bit_r(offs_t offset) +{ + if (offset & 1) + return pf_control_1_r(offset / 2); + else + return pf_control_1_r(offset / 2)>>8; +} + +/* used by dec8.cpp */ +void deco_bac06_device::pf_control1_8bit_w(offs_t offset, u8 data) +{ + if (offset<4) // these registers are 16-bit? + { + if (offset & 1) + pf_control_1_w(offset / 2, data, 0x00ff); + else + pf_control_1_w(offset / 2, data << 8, 0xff00); + } + else // these registers are 8-bit and mirror? (triothep vs actfancr) + { + if (offset & 1) + pf_control_1_w(offset / 2, data, 0x00ff); + else + pf_control_1_w(offset / 2, data, 0x00ff); + } +} + +u8 deco_bac06_device::pf_rowscroll_8bit_r(offs_t offset) +{ + if (offset & 1) + return pf_rowscroll_r(offset / 2); + else + return pf_rowscroll_r(offset / 2)>>8; +} + + +void deco_bac06_device::pf_rowscroll_8bit_w(offs_t offset, u8 data) +{ + if (offset & 1) + pf_rowscroll_w(offset / 2, data, 0x00ff); + else + pf_rowscroll_w(offset / 2, data << 8, 0xff00); +} + +u8 deco_bac06_device::pf_rowscroll_8bit_swap_r(offs_t offset) +{ + if (offset & 1) + return pf_rowscroll_r(offset / 2)>>8; + else + return pf_rowscroll_r(offset / 2); +} + +void deco_bac06_device::pf_rowscroll_8bit_swap_w(offs_t offset, u8 data) +{ + if (offset & 1) + pf_rowscroll_w(offset / 2, data << 8, 0xff00); + else + pf_rowscroll_w(offset / 2, data, 0x00ff); +} + + +/* used by hippodrm */ +void deco_bac06_device::pf_control0_8bit_packed_w(offs_t offset, u8 data) +{ + if (offset & 1) + pf_control_0_w(offset / 2, data << 8, 0xff00); + else + pf_control_0_w(offset / 2, data, 0x00ff); +} + +/* used by hippodrm */ +void deco_bac06_device::pf_control1_8bit_swap_w(offs_t offset, u8 data) +{ + pf_control1_8bit_w(offset ^ 1, data); +} + +/* used by hippodrm */ +u8 deco_bac06_device::pf_data_8bit_swap_r(offs_t offset) +{ + return pf_data_8bit_r(offset ^ 1); +} + +/* used by hippodrm */ +void deco_bac06_device::pf_data_8bit_swap_w(offs_t offset, u8 data) +{ + pf_data_8bit_w(offset ^ 1, data); +} |