summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/sega/model2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/sega/model2.cpp')
-rw-r--r--src/mame/sega/model2.cpp142
1 files changed, 102 insertions, 40 deletions
diff --git a/src/mame/sega/model2.cpp b/src/mame/sega/model2.cpp
index 58820125f5f..e2033e2311c 100644
--- a/src/mame/sega/model2.cpp
+++ b/src/mame/sega/model2.cpp
@@ -10,15 +10,13 @@
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;
+ - 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;
- dynamcopc: corrupts palette for 2d (most likely unrelated with the lack of DSP);
@@ -30,15 +28,9 @@
(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:
@@ -610,6 +602,9 @@ void model2_tgp_state::copro_fifo_w(u32 data)
}
else
m_copro_fifo_in->push(u32(data));
+
+ // 1 wait state for i960; prevents Manx TT course select rotation bug
+ m_maincpu->spin_until_time(attotime::from_nsec(40));
}
@@ -675,7 +670,8 @@ void model2b_state::copro_sharc_iop_w(offs_t offset, u32 data)
(strcmp(machine().system().name, "vonj" ) == 0) ||
(strcmp(machine().system().name, "vonr" ) == 0) ||
(strcmp(machine().system().name, "vonu" ) == 0) ||
- (strcmp(machine().system().name, "rchase2" ) == 0))
+ (strcmp(machine().system().name, "rchase2" ) == 0) ||
+ (strcmp(machine().system().name, "rchase2a" ) == 0))
{
m_copro_adsp->external_iop_write(offset, data);
}
@@ -1623,7 +1619,7 @@ u8 model2_state::in0_r()
*/
// Used by Sega Rally and Daytona USA, others might be different
-CUSTOM_INPUT_MEMBER(model2_state::daytona_gearbox_r)
+ioport_value model2_state::daytona_gearbox_r()
{
u8 res = m_gears.read_safe(0);
int i;
@@ -1746,7 +1742,7 @@ static INPUT_PORTS_START( daytona )
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(model2_state, daytona_gearbox_r)
+ PORT_BIT(0x70, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_CUSTOM_MEMBER(FUNC(model2_state::daytona_gearbox_r))
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_MODIFY("IN2")
@@ -1885,7 +1881,7 @@ static INPUT_PORTS_START( srallyc )
PORT_MODIFY("IN1")
PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x70, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_CUSTOM_MEMBER(model2_state, daytona_gearbox_r)
+ PORT_BIT(0x70, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_CUSTOM_MEMBER(FUNC(model2_state::daytona_gearbox_r))
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_MODIFY("IN2")
@@ -2039,6 +2035,30 @@ static INPUT_PORTS_START( rchase2 )
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( rchase2a )
+ PORT_INCLUDE(model2crx)
+
+ 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_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_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_START("P2_Y")
+ PORT_BIT(0xff, 0x80, IPT_AD_STICK_Y) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(50) PORT_KEYDELTA(15) PORT_PLAYER(2)
+INPUT_PORTS_END
+
static INPUT_PORTS_START( vstriker )
PORT_INCLUDE(model2crx)
@@ -2488,14 +2508,13 @@ 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();
+ SPEAKER(config, "speaker", 2).front();
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);
+ m_scsp->add_route(0, "speaker", 1.0, 0);
+ m_scsp->add_route(1, "speaker", 1.0, 1);
I8251(config, m_uart, 8000000); // uPD71051C, clock unknown
// m_uart->rxrdy_handler().set(FUNC(model2_state::sound_ready_w));
@@ -2509,12 +2528,12 @@ void model2_state::model2_scsp(machine_config &config)
/* original Model 2 */
void model2o_state::model2o(machine_config &config)
{
- I960(config, m_maincpu, 25000000);
+ I960(config, m_maincpu, 50_MHz_XTAL / 2);
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);
+ MB86234(config, m_copro_tgp, 50_MHz_XTAL);
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);
@@ -2544,7 +2563,7 @@ void model2o_state::model2o(machine_config &config)
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)
+ clock_device &uart_clock(CLOCK(config, "uart_clock", 16_MHz_XTAL / 2 / 16)); // 16 times 31.25kHz (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));
@@ -2660,11 +2679,11 @@ void model2o_state::vcop(machine_config &config)
/* 2A-CRX */
void model2a_state::model2a(machine_config &config)
{
- I960(config, m_maincpu, 25000000);
+ I960(config, m_maincpu, 50_MHz_XTAL / 2);
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);
+ MB86234(config, m_copro_tgp, 50_MHz_XTAL);
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);
@@ -2780,7 +2799,7 @@ void model2a_state::zeroguna(machine_config &config)
/* 2B-CRX */
void model2b_state::model2b(machine_config &config)
{
- I960(config, m_maincpu, 25000000);
+ I960(config, m_maincpu, 50_MHz_XTAL / 2);
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);
@@ -2935,7 +2954,7 @@ void model2b_state::zerogun(machine_config &config)
/* 2C-CRX */
void model2c_state::model2c(machine_config &config)
{
- I960(config, m_maincpu, 25000000);
+ I960(config, m_maincpu, 50_MHz_XTAL / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &model2c_state::model2c_crx_mem);
TIMER(config, "scantimer").configure_scanline(FUNC(model2c_state::model2c_interrupt), "screen", 0, 1);
@@ -2984,8 +3003,8 @@ void model2c_state::stcc(machine_config &config)
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_dsbz80->add_route(0, "speaker", 1.0, 0);
+ m_dsbz80->add_route(1, "speaker", 1.0, 1);
m_uart->txd_handler().set(m_dsbz80, FUNC(dsbz80_device::write_txd));
}
@@ -4548,7 +4567,7 @@ ROM_START( stcc ) /* Sega Touring Car Championship, Model 2C - Defaults to Japan
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_REGION( 0x20000, "dsbz80:mpegcpu", 0) // Z80 DSB program
ROM_LOAD("epr-19275.2s", 0x000000, 0x20000, CRC(ee809d3f) SHA1(347080858fbfe9955002f382603a1b86a52d26d5) )
ROM_REGION( 0x20000, "cpu4", 0) // Communication program
@@ -4558,7 +4577,7 @@ ROM_START( stcc ) /* Sega Touring Car Championship, Model 2C - Defaults to Japan
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_REGION( 0x800000, "dsbz80: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) )
@@ -4613,7 +4632,7 @@ ROM_START( stccb ) /* Sega Touring Car Championship Revision B, Model 2C - Defau
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_REGION( 0x20000, "dsbz80:mpegcpu", 0) // Z80 DSB program
ROM_LOAD("epr-19275.2s", 0x000000, 0x20000, CRC(ee809d3f) SHA1(347080858fbfe9955002f382603a1b86a52d26d5) )
ROM_REGION( 0x20000, "cpu4", 0) // Communication program
@@ -4623,7 +4642,7 @@ ROM_START( stccb ) /* Sega Touring Car Championship Revision B, Model 2C - Defau
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_REGION( 0x800000, "dsbz80: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) )
@@ -4678,7 +4697,7 @@ ROM_START( stcca ) /* Sega Touring Car Championship Revision A, Model 2C - Defau
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_REGION( 0x20000, "dsbz80:mpegcpu", 0) // Z80 DSB program
ROM_LOAD("epr-19275.2s", 0x000000, 0x20000, CRC(ee809d3f) SHA1(347080858fbfe9955002f382603a1b86a52d26d5) )
ROM_REGION( 0x20000, "cpu4", 0) // Communication program
@@ -4688,7 +4707,7 @@ ROM_START( stcca ) /* Sega Touring Car Championship Revision A, Model 2C - Defau
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_REGION( 0x800000, "dsbz80: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) )
@@ -4743,7 +4762,7 @@ ROM_START( stcco ) /* Sega Touring Car Championship, Model 2C - Defaults to Japa
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_REGION( 0x20000, "dsbz80:mpegcpu", 0) // Z80 DSB program
ROM_LOAD("epr-19275.2s", 0x000000, 0x20000, CRC(ee809d3f) SHA1(347080858fbfe9955002f382603a1b86a52d26d5) )
ROM_REGION( 0x20000, "cpu4", 0) // Communication program
@@ -4753,7 +4772,7 @@ ROM_START( stcco ) /* Sega Touring Car Championship, Model 2C - Defaults to Japa
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_REGION( 0x800000, "dsbz80: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) )
@@ -4989,7 +5008,7 @@ ROM_START( hotdp )
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("tex1.27", 0x0000000, 0x400000, CRC(eea00bdf) SHA1(5e04c19b544c6483252adaba3c92080d4750fde0) )
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) )
@@ -5447,6 +5466,48 @@ ROM_START( rchase2 ) /* Rail Chase 2 Revision A, Model 2B. Sega game ID# 833-118
ROM_LOAD("epr-17895.ic8", 0x0000, 0x8000, CRC(8fd7003d) SHA1(b8b16e20e3ed07326330ba335ea1e701cc0bec17) )
ROM_END
+ROM_START( rchase2a ) /* Rail Chase 2, Model 2B */
+ ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program
+ ROM_LOAD32_WORD("epr-18143.15", 0x000000, 0x080000, CRC(07ae7e58) SHA1(8802529e33a598618480a81dcd2b9541ff481e04) ) // X & Y axis controls reversed compared to rchase2
+ ROM_LOAD32_WORD("epr-18144.16", 0x000002, 0x080000, CRC(a1aa3e54) SHA1(6fc0394abce176b503a350d669f7b54d2c0c4033) ) // maybe a factory conversion set??
+ ROM_LOAD32_WORD("epr-18145.13", 0x100000, 0x080000, CRC(8d685f38) SHA1(4a8997d0fd20c771a5d66aff7d2c6170e94b130e) )
+ ROM_LOAD32_WORD("epr-18146.14", 0x100002, 0x080000, CRC(412df17a) SHA1(f963dd72bbf1bc7ab707aecf21471677177e0f5a) )
+
+ 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_REGION32_LE( 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
@@ -6733,8 +6794,8 @@ ROM_START( daytona93 ) /* Daytona USA, Deluxe cabinet, '93 version, ROM board ID
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_LOAD16_WORD_SWAP("epr-16489.7", 0x000000, 0x020000, CRC(c20e543e) SHA1(ab5bf3c6d82c08317d6be73729185ce54963aa8a) )
+ ROM_LOAD16_WORD_SWAP("epr-16490.8", 0x020000, 0x020000, CRC(c24edaab) SHA1(693e9fdf958a90c722a78daf48140788fa6a2f30) )
ROM_REGION( 0x400000, M1AUDIO_MPCM1_REGION, 0 ) // Samples
ROM_LOAD("mpr-16491.32", 0x000000, 0x200000, CRC(89920903) SHA1(06d1d55470ae99f8de0f8c88c694f34c4eb13668) )
@@ -7200,9 +7261,9 @@ ROM_START( desert ) /* Desert Tank, Model 2, Sega Game ID# 833-11002, ROM board
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-16964.20", 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_LOAD32_WORD("mpr-16965.21", 0x400002, 0x200000, CRC(9ba7645f) SHA1(c04f369961f908bac16fad8e32b863202390c205) )
ROM_REGION( 0x1000000, "textures", 0 ) // Textures
ROM_LOAD32_WORD("mpr-16967.25", 0x000000, 0x200000, CRC(b8b84c9d) SHA1(00ef320988609e98c8af383b68d845e3be8d0a03) )
@@ -7459,7 +7520,7 @@ GAME( 1997, zeroguna, zerogun, zeroguna, zerogun, model2a_state, init_z
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( 1997, airwlkrs, 0, model2a, vf2, model2a_state, empty_init, ROT0, "Data East", "Air Walkers", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+GAME( 1997, airwlkrs, 0, model2a, vf2, model2a_state, empty_init, ROT0, "Data East Corporation", "Air Walkers", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
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 )
@@ -7467,6 +7528,7 @@ GAME( 1998, hpyagu98, 0, model2a, vf2, model2a_state, empty_
// 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, rchase2a, rchase2, rchase2, rchase2a, model2b_state, empty_init, ROT0, "Sega", "Rail Chase 2", 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 )