From 8a472f2aaec06ae2d02bcd6153de2db17438bc0b Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 10 May 2017 22:02:27 -0400 Subject: [PATCH] daytona: Add feedback driver board (including ROM) --- src/mame/drivers/model2.cpp | 143 ++++++++++++++++++++++-------------- 1 file changed, 86 insertions(+), 57 deletions(-) diff --git a/src/mame/drivers/model2.cpp b/src/mame/drivers/model2.cpp index c10056d5646..6ede8e3b408 100644 --- a/src/mame/drivers/model2.cpp +++ b/src/mame/drivers/model2.cpp @@ -2424,6 +2424,55 @@ static MACHINE_CONFIG_START( model2o, model2_state ) MCFG_M2COMM_ADD("m2comm") MACHINE_CONFIG_END +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); +} + +static ADDRESS_MAP_START( drive_map, AS_PROGRAM, 8, model2_state ) + AM_RANGE(0x0000, 0x7fff) AM_ROM + AM_RANGE(0xe000, 0xffff) AM_RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( drive_io_map, AS_IO, 8, model2_state ) + ADDRESS_MAP_GLOBAL_MASK(0xff) + AM_RANGE(0x00, 0x00) AM_WRITENOP //watchdog + AM_RANGE(0x20, 0x2f) AM_DEVREADWRITE("driveio1", sega_315_5296_device, read, write) + AM_RANGE(0x40, 0x4f) AM_DEVREADWRITE("driveio2", sega_315_5296_device, read, write) + AM_RANGE(0x80, 0x83) AM_DEVREADWRITE("driveadc", msm6253_device, d7_r, address_w) +ADDRESS_MAP_END + +static MACHINE_CONFIG_FRAGMENT( sj25_0207_01 ) + MCFG_CPU_ADD("drivecpu", Z80, 16000000/4) //??? + MCFG_CPU_PROGRAM_MAP(drive_map) + MCFG_CPU_IO_MAP(drive_io_map) + MCFG_CPU_VBLANK_INT_DRIVER("screen", model2_state, irq0_line_hold) + + MCFG_DEVICE_ADD("driveio1", SEGA_315_5296, 0) // unknown clock + MCFG_315_5296_OUT_PORTD_CB(WRITE8(model2_state, driveio_port_w)) + MCFG_315_5296_IN_PORTG_CB(READ8(model2_state, driveio_portg_r)) + MCFG_315_5296_IN_PORTH_CB(READ8(model2_state, driveio_porth_r)) + + MCFG_DEVICE_ADD("driveio2", SEGA_315_5296, 0) // unknown clock + + MCFG_DEVICE_ADD("driveadc", MSM6253, 0) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( daytona, model2o ) + MCFG_FRAGMENT_ADD(sj25_0207_01) +MACHINE_CONFIG_END + /* 2A-CRX */ static MACHINE_CONFIG_START( model2a, model2_state ) MCFG_CPU_ADD("maincpu", I960, 25000000) @@ -2507,50 +2556,8 @@ static MACHINE_CONFIG_DERIVED( model2a_0229, model2a ) // MCFG_SET_5838_READ_CALLBACK(model2_state, crypt_read_callback) MACHINE_CONFIG_END -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); -} - -static ADDRESS_MAP_START( drive_map, AS_PROGRAM, 8, model2_state ) - AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0xe000, 0xffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( drive_io_map, AS_IO, 8, model2_state ) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_WRITENOP //watchdog - AM_RANGE(0x20, 0x2f) AM_DEVREADWRITE("driveio1", sega_315_5296_device, read, write) - AM_RANGE(0x40, 0x4f) AM_DEVREADWRITE("driveio2", sega_315_5296_device, read, write) - AM_RANGE(0x80, 0x83) AM_DEVREADWRITE("driveadc", msm6253_device, d7_r, address_w) -ADDRESS_MAP_END - static MACHINE_CONFIG_DERIVED( srallyc, model2a ) - - MCFG_CPU_ADD("drivecpu", Z80, 16000000/4) //??? - MCFG_CPU_PROGRAM_MAP(drive_map) - MCFG_CPU_IO_MAP(drive_io_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", model2_state, irq0_line_hold) - - MCFG_DEVICE_ADD("driveio1", SEGA_315_5296, 0) // unknown clock - MCFG_315_5296_OUT_PORTD_CB(WRITE8(model2_state, driveio_port_w)) - MCFG_315_5296_IN_PORTG_CB(READ8(model2_state, driveio_portg_r)) - MCFG_315_5296_IN_PORTH_CB(READ8(model2_state, driveio_porth_r)) - - MCFG_DEVICE_ADD("driveio2", SEGA_315_5296, 0) // unknown clock - - MCFG_DEVICE_ADD("driveadc", MSM6253, 0) + MCFG_FRAGMENT_ADD(sj25_0207_01) MACHINE_CONFIG_END /* 2B-CRX */ @@ -5559,8 +5566,11 @@ 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, "user7", 0 ) // Unknown ROM + 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 ROM_START( daytonase ) /* Daytona USA (Japan, Revision A), Original Model 2 w/Model 1 sound board */ @@ -5620,8 +5630,11 @@ 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, "user7", 0 ) // Unknown ROM + 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 ROM_START( daytona93 ) /* Daytona USA Deluxe '93 version (There is said to be a Deluxe '94 edition) */ @@ -5680,8 +5693,11 @@ ROM_START( daytona93 ) /* Daytona USA Deluxe '93 version (There is said to be a MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ - ROM_REGION( 0x10000, "user7", 0 ) // Unknown ROM + 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 ROM_START( daytonas ) /* Daytona USA (With Saturn Adverts) */ @@ -5741,8 +5757,11 @@ ROM_START( daytonas ) /* Daytona USA (With Saturn Adverts) */ MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ - ROM_REGION( 0x10000, "user7", 0 ) // Unknown ROM + 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 ROM_START( daytonat )/* Daytona USA (Japan, Turbo hack) */ @@ -5804,8 +5823,11 @@ ROM_START( daytonat )/* Daytona USA (Japan, Turbo hack) */ MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ - ROM_REGION( 0x10000, "user7", 0 ) // Unknown ROM + 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 ROM_START( daytonata )/* Daytona USA (Japan, Turbo hack) */ @@ -5865,8 +5887,11 @@ ROM_START( daytonata )/* Daytona USA (Japan, Turbo hack) */ MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ - ROM_REGION( 0x10000, "user7", 0 ) // Unknown ROM + 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 /* @@ -5937,8 +5962,11 @@ ROM_START( daytonam ) /* Daytona USA (Japan, To The MAXX) */ MODEL2_CPU_BOARD /* Model 2 CPU board extra roms */ - ROM_REGION( 0x10000, "user7", 0 ) // Unknown ROM + 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 ROM_START( vcop ) /* Virtua Cop Revision B, Model 2 */ @@ -6098,6 +6126,7 @@ DRIVER_INIT_MEMBER(model2_state,zerogun) DRIVER_INIT_MEMBER(model2_state,daytonam) { + DRIVER_INIT_CALL(srallyc); m_maincpu->space(AS_PROGRAM).install_read_handler(0x240000, 0x24ffff, read32_delegate(FUNC(model2_state::maxx_r),this)); } @@ -6131,13 +6160,13 @@ DRIVER_INIT_MEMBER(model2_state,srallyc) // Model 2 (TGPs, Model 1 sound board) -GAME( 1993, daytona, 0, model2o, daytona, driver_device, 0, ROT0, "Sega", "Daytona USA (Japan, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1993, daytonase, daytona, model2o, daytona, driver_device, 0, ROT0, "Sega", "Daytona USA Special Edition (Japan, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1993, daytona93, daytona, model2o, daytona, driver_device, 0, ROT0, "Sega", "Daytona USA Deluxe '93", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1993, daytonas, daytona, model2o, daytona, driver_device, 0, ROT0, "Sega", "Daytona USA (With Saturn Adverts)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1993, daytonat, daytona, model2o, daytona, driver_device, 0, ROT0, "Sega", "Daytona USA (Japan, Turbo hack, set 1)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1993, daytonata, daytona, model2o, daytona, driver_device, 0, ROT0, "Sega", "Daytona USA (Japan, Turbo hack, set 2)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1993, daytonam, daytona, model2o, daytona, model2_state, daytonam, ROT0, "Sega", "Daytona USA (Japan, To The MAXX)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1993, daytona, 0, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA (Japan, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1993, daytonase, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA Special Edition (Japan, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1993, daytona93, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA Deluxe '93", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1993, daytonas, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA (With Saturn Adverts)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1993, daytonat, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA (Japan, Turbo hack, set 1)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1993, daytonata, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA (Japan, Turbo hack, set 2)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1993, daytonam, daytona, daytona, daytona, model2_state, daytonam, ROT0, "Sega", "Daytona USA (Japan, To The MAXX)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) GAME( 1994, desert, 0, model2o, desert, driver_device, 0, ROT0, "Sega / Martin Marietta", "Desert Tank", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) GAME( 1994, vcop, 0, model2o, vcop, driver_device, 0, ROT0, "Sega", "Virtua Cop (Revision B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) GAME( 1994, vcopa, vcop, model2o, vcop, driver_device, 0, ROT0, "Sega", "Virtua Cop (Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )