diff options
author | 2020-10-05 16:15:23 +0200 | |
---|---|---|
committer | 2020-10-06 01:15:23 +1100 | |
commit | 6134e07ba48e76c6e6da9418e49e9d66d9321a08 (patch) | |
tree | a4fa20ac66ff4fc8fb3921b05033c5d6d6648c57 | |
parent | f390ea1004a4563bb79912a1a13d5de70c2e316b (diff) |
New working clones (#7305)
* rltennis.cpp: Added PLD dump to 'rltennis' [caius]
* Also fixed the clock per the crystal on the PCB
* As per the game speed, we've recorded a small video for reference: https://www.youtube.com/watch?v=C1rzWiFDItA
New working clones
------------------
Reality Tennis (set 2) [Maria Morpalier, jordigahan, ClawGrip]
-rw-r--r-- | src/mame/drivers/rltennis.cpp | 60 | ||||
-rw-r--r-- | src/mame/mame.lst | 1 |
2 files changed, 48 insertions, 13 deletions
diff --git a/src/mame/drivers/rltennis.cpp b/src/mame/drivers/rltennis.cpp index 7578ddd8df5..7ace25a62eb 100644 --- a/src/mame/drivers/rltennis.cpp +++ b/src/mame/drivers/rltennis.cpp @@ -74,11 +74,11 @@ player - when there's nothing to play - first, empty 2k of ROMs are selected. #define RLT_REFRESH_RATE 60 #define RLT_TIMER_FREQ (RLT_REFRESH_RATE*256) -#define RLT_XTAL XTAL(12'000'000) +#define RLT_XTAL XTAL(32'000'000) uint16_t rltennis_state::io_r() { - return (ioport("P1" )->read()&0x1fff) | (m_unk_counter<<13); /* top 3 bits controls smaple address update */ + return (ioport("P1" )->read()&0x1fff) | (m_unk_counter<<13); // Top 3 bits control sample address update } void rltennis_state::snd1_w(offs_t offset, uint16_t data, uint16_t mem_mask) @@ -102,8 +102,8 @@ void rltennis_state::rltennis_main(address_map &map) map(0x720007, 0x720007).w("ramdac", FUNC(ramdac_device::index_r_w)); map(0x740000, 0x740001).w(FUNC(rltennis_state::snd1_w)); map(0x760000, 0x760001).w(FUNC(rltennis_state::snd2_w)); - map(0x780000, 0x780001).nopw(); /* sound control, unknown, usually = 0x0044 */ - map(0x7a0000, 0x7a0003).nopr(); /* unknown, read only at boot time*/ + map(0x780000, 0x780001).nopw(); // Sound control, unknown, usually = 0x0044 + map(0x7a0000, 0x7a0003).nopr(); // Unknown, read only at boot time map(0x7e0000, 0x7e0001).r(FUNC(rltennis_state::io_r)); map(0x7e0002, 0x7e0003).portr("P2"); } @@ -139,13 +139,13 @@ INPUT_PORTS_END TIMER_CALLBACK_MEMBER(rltennis_state::sample_player) { - if((m_dac_counter&0x7ff) == 0x7ff) /* reload top address bits */ + if((m_dac_counter&0x7ff) == 0x7ff) // Reload top address bits { m_sample_rom_offset[0]=(( m_data740000 >> m_offset_shift ) & 0xff )<<11; m_sample_rom_offset[1]=(( m_data760000 >> m_offset_shift ) & 0xff )<<11; - m_offset_shift^=8; /* switch between MSB and LSB */ + m_offset_shift^=8; // Switch between MSB and LSB } - ++m_dac_counter; /* update low address bits */ + ++m_dac_counter; // Update low address bits m_dac[0]->write(m_samples[0][m_sample_rom_offset[0] + (m_dac_counter & 0x7ff)]); m_dac[1]->write(m_samples[1][m_sample_rom_offset[1] + (m_dac_counter & 0x7ff)]); @@ -154,9 +154,9 @@ TIMER_CALLBACK_MEMBER(rltennis_state::sample_player) INTERRUPT_GEN_MEMBER(rltennis_state::interrupt) { - ++m_unk_counter; /* frame counter? verify */ + ++m_unk_counter; // Frame counter? verify device.execute().set_input_line(4, HOLD_LINE); - device.execute().set_input_line(1, HOLD_LINE); /* hack, to avoid dead loop */ + device.execute().set_input_line(1, HOLD_LINE); // Hack, to avoid dead loop } void rltennis_state::machine_start() @@ -183,7 +183,7 @@ void rltennis_state::ramdac_map(address_map &map) void rltennis_state::rltennis(machine_config &config) { - M68000(config, m_maincpu, RLT_XTAL/2); /* 68000P8 ??? */ + M68000(config, m_maincpu, RLT_XTAL/8); // MC68000P8, divider is a guess m_maincpu->set_addrmap(AS_PROGRAM, &rltennis_state::rltennis_main); m_maincpu->set_vblank_int("screen", FUNC(rltennis_state::interrupt)); @@ -204,8 +204,8 @@ void rltennis_state::rltennis(machine_config &config) SPEAKER(config, "speaker").front_center(); - DAC_8BIT_R2R(config, "dac1", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // unknown DAC - DAC_8BIT_R2R(config, "dac2", 0).add_route(ALL_OUTPUTS, "speaker", 0.25); // unknown DAC + DAC_8BIT_R2R(config, "dac1", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // Unknown DAC + DAC_8BIT_R2R(config, "dac2", 0).add_route(ALL_OUTPUTS, "speaker", 0.25); // Unknown DAC voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.add_route(0, "dac1", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac1", -1.0, DAC_VREF_NEG_INPUT); vref.add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT); @@ -233,6 +233,40 @@ ROM_START( rltennis ) ROM_REGION( 0x080000, "samples2", 0 ) ROM_LOAD( "tennis_3.u52", 0x00000, 0x80000, CRC(517dcd0e) SHA1(b2703e185ee8cf7e115ea07151e7bee8be34948b) ) + + ROM_REGION( 0x2e5, "plds", 0 ) + ROM_LOAD( "realitytennis_gal22v10.u20", 0x000, 0x2e5, BAD_DUMP CRC(13be6cec) SHA1(5a07ed3ac6a1993196e0e76b852d0ba132f5ddb9) ) // Bruteforced but verified +ROM_END + +// PCB marked as "TCH-MAVIR.001 +// Two TI TPC1020AF instead of two Actel A1020B, also labeled as JOAQUIN (A) and JUANA (B) +ROM_START( rltennisa ) + ROM_REGION( 0x100000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "tennis_1_a.bin", 0x00001, 0x80000, CRC(30bd9f1d) SHA1(52225793fb1fee4d395f21c45756e9244cf60b9e) ) + ROM_LOAD16_BYTE( "tennis_2_a.bin", 0x00000, 0x80000, CRC(f2997957) SHA1(c2ccaecd337c46cd9e4a40d43f30f203efc10111) ) + + ROM_REGION( 0x1000000, "gfx", ROMREGION_ERASE00 ) + ROM_LOAD( "tennis_5.u33", 0x000000, 0x80000, CRC(067a2e4b) SHA1(ab5a227de2b0c51b17aeca68c8af1bf224904ac8) ) + ROM_LOAD( "tennis_6.u34", 0x080000, 0x80000, CRC(901df2c1) SHA1(7e57d7c7e281ddc02a3e34178d3e471bd8e1d572) ) + ROM_LOAD( "tennis_7.u35", 0x100000, 0x80000, CRC(8d70fb37) SHA1(250c4c3d32e5a7e17413ee41e1abccb0492b63fd) ) + ROM_LOAD( "tennis_8.u36", 0x180000, 0x80000, CRC(26d202ba) SHA1(0e841e35de328f23624a19780a734a18f5409d69) ) + ROM_LOAD( "tennis_9.u37", 0x200000, 0x80000, CRC(1d164ee0) SHA1(b9c80b3c0dadbff36a04141b8995a5282a8d10f7) ) + ROM_LOAD( "tennis_10.u38",0x280000, 0x80000, CRC(fd2c6647) SHA1(787f236d5b72ee24d39e783eb2453bea58f07290) ) + ROM_LOAD( "tennis_11.u39",0x300000, 0x80000, CRC(a59dc0c8) SHA1(48f258e74fbb64b7538c9777d7598774ca8396eb) ) + ROM_LOAD( "tennis_12.u40",0x380000, 0x80000, CRC(b9677887) SHA1(84b79864555d3d6e9c443913910a055e27d30d08) ) + ROM_LOAD( "tennis_13.u41",0x400000, 0x80000, CRC(3d4fbcac) SHA1(e01f479d7d516ff83cbbd82d83617146d7a242d3) ) + ROM_LOAD( "tennis_14.u42",0x480000, 0x80000, CRC(37fe0f5d) SHA1(7593f1ea07bc0a741c952e6850bed1bf0a824510) ) + + ROM_REGION( 0x080000, "samples1", 0 ) + ROM_LOAD( "tennis_4.u59", 0x00000, 0x80000, CRC(f56462ea) SHA1(638777e12f2649a5b4366f034f0ba721fc4580a8) ) + + ROM_REGION( 0x080000, "samples2", 0 ) + ROM_LOAD( "tennis_3.u52", 0x00000, 0x80000, CRC(517dcd0e) SHA1(b2703e185ee8cf7e115ea07151e7bee8be34948b) ) + + ROM_REGION( 0x3fc, "plds", 0 ) + ROM_LOAD( "gal16v8.ic23", 0x000, 0x117, CRC(7bc89e80) SHA1(6b34527121e4dbac37fbbd79c57a7eab81de0198) ) + ROM_LOAD( "gal22v10.ic2", 0x117, 0x2e5, CRC(b5a7cb92) SHA1(05d6e8c8208ac486e849de3322f049bcd38561e1) ) ROM_END -GAME( 1993, rltennis, 0, rltennis, rltennis, rltennis_state, empty_init, ROT0, "TCH", "Reality Tennis", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1993, rltennis, 0, rltennis, rltennis, rltennis_state, empty_init, ROT0, "TCH", "Reality Tennis (set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1993, rltennisa, rltennis, rltennis, rltennis, rltennis_state, empty_init, ROT0, "TCH", "Reality Tennis (set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 157031ad426..65decad86c9 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -35364,6 +35364,7 @@ sarpc_j233 // @source:rltennis.cpp rltennis // (c) 1993 TCH +rltennisa // (c) 1993 TCH @source:rm380z.cpp rm380z // |