diff options
Diffstat (limited to 'src/mame/drivers/model2.cpp')
-rw-r--r-- | src/mame/drivers/model2.cpp | 144 |
1 files changed, 91 insertions, 53 deletions
diff --git a/src/mame/drivers/model2.cpp b/src/mame/drivers/model2.cpp index 53787d0c878..86f297d4ad5 100644 --- a/src/mame/drivers/model2.cpp +++ b/src/mame/drivers/model2.cpp @@ -97,7 +97,7 @@ #include "machine/msm6253.h" #include "machine/nvram.h" #include "machine/315_5296.h" -#include "machine/m1io.h" +#include "machine/model1io.h" #include "sound/2612intf.h" #include "video/segaic24.h" #include "speaker.h" @@ -1176,11 +1176,6 @@ WRITE32_MEMBER(model2_state::geo_w) /*****************************************************************************/ -READ32_MEMBER(model2o_state::daytona_unk_r) -{ - return 0x00400000; -} - READ32_MEMBER(model2_state::irq_request_r) { m_maincpu->i960_noburst(); @@ -1537,6 +1532,76 @@ WRITE8_MEMBER( model2o_state::vcop_output_w ) machine().bookkeeping().coin_counter_w(0, BIT(~data, 0)); } + +//************************************************************************** +// I/O BOARD +//************************************************************************** + +READ32_MEMBER( model2o_state::dpram_r ) +{ + uint32_t data = m_dpram[offset] & mem_mask; + + // intercept reads for the lightgun ports + // needs to be done because the vcop ioboard isn't emulated + // can be removed once that's done (837-11130 + 837-11131) + + if (offset >= 0x100/4 && offset <= 0x10f/4) + { + if (ACCESSING_BITS_16_31) + { + data &= 0x0000ffff; + data |= (m_lightgun_ports[offset & 0x03].read_safe(0) >> 8) << 16; + } + if (ACCESSING_BITS_0_15) + { + data &= 0xffff0000; + data |= m_lightgun_ports[offset & 0x03].read_safe(0) & 0xff; + } + } + + if (offset >= 0x110/4 && offset <= 0x113/4) + { + if (ACCESSING_BITS_0_15) + { + data &= 0xffff0000; + data |= lightgun_offscreen_r(space, 0); + } + } + + return data; +} + +WRITE32_MEMBER( model2o_state::dpram_w ) +{ + COMBINE_DATA(&m_dpram[offset]); +} + +// 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. + +READ8_MEMBER( model2o_state::io_r ) +{ + if ((offset & 1) == 0) + return m_dpram[offset >> 1]; + else + return m_dpram[offset >> 1] >> 16; +} + +WRITE8_MEMBER( model2o_state::io_w ) +{ + if ((offset & 1) == 0) + { + m_dpram[offset >> 1] &= 0x00ff0000; + m_dpram[offset >> 1] |= data; + } + else + { + m_dpram[offset >> 1] &= 0x000000ff; + m_dpram[offset >> 1] |= data << 16; + } +} + /* model 2/2a common memory map */ void model2_tgp_state::model2_tgp_mem(address_map &map) { @@ -1562,12 +1627,7 @@ void model2o_state::model2o_mem(address_map &map) map(0x00200000, 0x0021ffff).ram(); map(0x00220000, 0x0023ffff).rom().region("maincpu", 0x20000); map(0x00980004, 0x00980007).r(this, FUNC(model2o_state::fifo_control_2o_r)); - - map(0x01c00000, 0x01c0001f).rw("io", FUNC(m1io_device::read), FUNC(m1io_device::write)).umask32(0x00ff00ff); - map(0x01c00040, 0x01c00043).r(this, FUNC(model2o_state::daytona_unk_r)); - map(0x01c00100, 0x01c0010f).r(this, FUNC(model2o_state::lightgun_coords_r)).umask32(0x00ff00ff); - map(0x01c00110, 0x01c00113).r(this, FUNC(model2o_state::lightgun_offscreen_r)).umask32(0x00ff00ff); - map(0x01c00200, 0x01c002ff).ram().share("backup2"); + map(0x01c00000, 0x01c007ff).rw(this, FUNC(model2o_state::dpram_r), FUNC(model2o_state::dpram_w)).share("dpram"); // 2k*8-bit dual port ram map(0x01c80000, 0x01c80003).rw(this, FUNC(model2o_state::model2_serial_r), FUNC(model2o_state::model2_serial_w)); } @@ -2556,11 +2616,13 @@ MACHINE_CONFIG_START(model2o_state::model2o) MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") MCFG_NVRAM_ADD_1FILL("backup1") - MCFG_NVRAM_ADD_1FILL("backup2") - MCFG_DEVICE_ADD("io", SEGA_M1IO, 0) - MCFG_M1IO_DI0_CB(IOPORT("IN0")) - MCFG_M1IO_DI1_CB(IOPORT("IN1")) + MCFG_DEVICE_ADD("ioboard", SEGA_MODEL1IO, 0) + MCFG_DEVICE_BIOS("epr14869c"); + MCFG_MODEL1IO_READ_CB(READ8(model2o_state, io_r)) + MCFG_MODEL1IO_WRITE_CB(WRITE8(model2o_state, io_w)) + MCFG_MODEL1IO_IN0_CB(IOPORT("IN0")) + MCFG_MODEL1IO_IN1_CB(IOPORT("IN1")) model2_timers(config); model2_screen(config); @@ -2629,11 +2691,11 @@ MACHINE_CONFIG_START(model2o_state::daytona) model2o(config); sj25_0207_01(config); - MCFG_DEVICE_MODIFY("io") - MCFG_M1IO_AN0_CB(IOPORT("STEER")) - MCFG_M1IO_AN1_CB(IOPORT("ACCEL")) - MCFG_M1IO_AN2_CB(IOPORT("BRAKE")) - MCFG_M1IO_DO_CB(WRITE8(model2o_state, daytona_output_w)) + MCFG_DEVICE_MODIFY("ioboard") + MCFG_MODEL1IO_AN0_CB(IOPORT("STEER")) + MCFG_MODEL1IO_AN1_CB(IOPORT("ACCEL")) + MCFG_MODEL1IO_AN2_CB(IOPORT("BRAKE")) + MCFG_MODEL1IO_OUTPUT_CB(WRITE8(model2o_state, daytona_output_w)) MACHINE_CONFIG_END MACHINE_CONFIG_START(model2o_maxx_state::daytona_maxx) @@ -2653,19 +2715,19 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(model2o_state::desert) model2o(config); - MCFG_DEVICE_MODIFY("io") - MCFG_M1IO_AN0_CB(IOPORT("STEER")) - MCFG_M1IO_AN1_CB(IOPORT("ACCEL")) - MCFG_M1IO_AN2_CB(IOPORT("BRAKE")) - MCFG_M1IO_DO_CB(WRITE8(model2o_state, desert_output_w)) + MCFG_DEVICE_MODIFY("ioboard") + MCFG_MODEL1IO_AN0_CB(IOPORT("STEER")) + MCFG_MODEL1IO_AN1_CB(IOPORT("ACCEL")) + MCFG_MODEL1IO_AN2_CB(IOPORT("BRAKE")) + MCFG_MODEL1IO_OUTPUT_CB(WRITE8(model2o_state, desert_output_w)) MACHINE_CONFIG_END MACHINE_CONFIG_START(model2o_state::vcop) model2o(config); - MCFG_DEVICE_MODIFY("io") - MCFG_M1IO_DI2_CB(IOPORT("IN2")) - MCFG_M1IO_DO_CB(WRITE8(model2o_state, vcop_output_w)) + MCFG_DEVICE_MODIFY("ioboard") + MCFG_MODEL1IO_IN2_CB(IOPORT("IN2")) + MCFG_MODEL1IO_OUTPUT_CB(WRITE8(model2o_state, vcop_output_w)) MACHINE_CONFIG_END /* 2A-CRX */ @@ -5855,9 +5917,6 @@ ROM_START( daytona ) /* Daytona USA (Japan, Revision A), Original Model 2 w/Mode MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ - ROM_REGION( 0x10000, "iocpu", 0 ) // 837-10539 I/O board - ROM_LOAD("epr-14869c.25", 0x000000, 0x010000, CRC(24b68e64) SHA1(c19d044d4c2fe551474492aa51922587394dd371) ) - ROM_REGION( 0x10000, "drivecpu", 0 ) // 838-10646 drive board ROM_LOAD("epr-16488a.ic12", 0x000000, 0x010000, CRC(546c5d1a) SHA1(5533301fe7e3b499e6cee12230d2c656c3c667da) ) ROM_END @@ -5919,9 +5978,6 @@ ROM_START( daytonase ) /* Daytona USA (Japan, Revision A), Original Model 2 w/Mo MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ - ROM_REGION( 0x10000, "iocpu", 0 ) // 837-10539 I/O board - ROM_LOAD("epr-14869c.25", 0x000000, 0x010000, CRC(24b68e64) SHA1(c19d044d4c2fe551474492aa51922587394dd371) ) - ROM_REGION( 0x10000, "drivecpu", 0 ) // 838-10646 drive board ROM_LOAD("epr-16488a.ic12", 0x000000, 0x010000, CRC(546c5d1a) SHA1(5533301fe7e3b499e6cee12230d2c656c3c667da) ) ROM_END @@ -5982,9 +6038,6 @@ ROM_START( daytona93 ) /* Daytona USA (Deluxe cabinet, '93 version. There is sai MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ - ROM_REGION( 0x10000, "iocpu", 0 ) // 837-10539 I/O board - ROM_LOAD("epr-14869c.25", 0x000000, 0x010000, CRC(24b68e64) SHA1(c19d044d4c2fe551474492aa51922587394dd371) ) - 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 @@ -6046,9 +6099,6 @@ ROM_START( daytonas ) /* Daytona USA (With Saturn Adverts) */ MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ - ROM_REGION( 0x10000, "iocpu", 0 ) // 837-10539 I/O board - ROM_LOAD("epr-14869c.25", 0x000000, 0x010000, CRC(24b68e64) SHA1(c19d044d4c2fe551474492aa51922587394dd371) ) - 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 @@ -6112,9 +6162,6 @@ ROM_START( daytonat )/* Daytona USA (Japan, Turbo hack) */ MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ - ROM_REGION( 0x10000, "iocpu", 0 ) // 837-10539 I/O board - ROM_LOAD("epr-14869c.25", 0x000000, 0x010000, CRC(24b68e64) SHA1(c19d044d4c2fe551474492aa51922587394dd371) ) - ROM_REGION( 0x10000, "drivecpu", 0 ) // 838-10646 drive board ROM_LOAD("epr-16488a.ic12", 0x000000, 0x010000, CRC(546c5d1a) SHA1(5533301fe7e3b499e6cee12230d2c656c3c667da) ) ROM_END @@ -6176,9 +6223,6 @@ ROM_START( daytonata )/* Daytona USA (Japan, Turbo hack) */ MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ - ROM_REGION( 0x10000, "iocpu", 0 ) // 837-10539 I/O board - ROM_LOAD("epr-14869c.25", 0x000000, 0x010000, CRC(24b68e64) SHA1(c19d044d4c2fe551474492aa51922587394dd371) ) - ROM_REGION( 0x10000, "drivecpu", 0 ) // 838-10646 drive board ROM_LOAD("epr-16488a.ic12", 0x000000, 0x010000, CRC(546c5d1a) SHA1(5533301fe7e3b499e6cee12230d2c656c3c667da) ) ROM_END @@ -6251,9 +6295,6 @@ ROM_START( daytonam ) /* Daytona USA (Japan, To The MAXX) */ MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ - ROM_REGION( 0x10000, "iocpu", 0 ) // 837-10539 I/O board - ROM_LOAD("epr-14869c.25", 0x000000, 0x010000, CRC(24b68e64) SHA1(c19d044d4c2fe551474492aa51922587394dd371) ) - ROM_REGION( 0x10000, "drivecpu", 0 ) // 838-10646 drive board ROM_LOAD("epr-16488a.ic12", 0x000000, 0x010000, CRC(546c5d1a) SHA1(5533301fe7e3b499e6cee12230d2c656c3c667da) ) @@ -6322,9 +6363,6 @@ ROM_START( daytonagtx ) MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ - ROM_REGION( 0x10000, "iocpu", 0 ) // 837-10539 I/O board - ROM_LOAD("epr-14869c.25", 0x000000, 0x010000, CRC(24b68e64) SHA1(c19d044d4c2fe551474492aa51922587394dd371) ) - ROM_REGION( 0x10000, "drivecpu", 0 ) // 838-10646 drive board ROM_LOAD("epr-16488a.ic12", 0x000000, 0x010000, CRC(546c5d1a) SHA1(5533301fe7e3b499e6cee12230d2c656c3c667da) ) ROM_END |