summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author ClawGrip <clawgrip@hotmail.com>2020-10-05 16:15:23 +0200
committer GitHub <noreply@github.com>2020-10-06 01:15:23 +1100
commit6134e07ba48e76c6e6da9418e49e9d66d9321a08 (patch)
treea4fa20ac66ff4fc8fb3921b05033c5d6d6648c57
parentf390ea1004a4563bb79912a1a13d5de70c2e316b (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.cpp60
-rw-r--r--src/mame/mame.lst1
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 //