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]
This commit is contained in:
ClawGrip 2020-10-05 16:15:23 +02:00 committed by GitHub
parent f390ea1004
commit 6134e07ba4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 48 additions and 13 deletions

View File

@ -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_REFRESH_RATE 60
#define RLT_TIMER_FREQ (RLT_REFRESH_RATE*256) #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() 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) 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(0x720007, 0x720007).w("ramdac", FUNC(ramdac_device::index_r_w));
map(0x740000, 0x740001).w(FUNC(rltennis_state::snd1_w)); map(0x740000, 0x740001).w(FUNC(rltennis_state::snd1_w));
map(0x760000, 0x760001).w(FUNC(rltennis_state::snd2_w)); map(0x760000, 0x760001).w(FUNC(rltennis_state::snd2_w));
map(0x780000, 0x780001).nopw(); /* sound control, unknown, usually = 0x0044 */ map(0x780000, 0x780001).nopw(); // Sound control, unknown, usually = 0x0044
map(0x7a0000, 0x7a0003).nopr(); /* unknown, read only at boot time*/ map(0x7a0000, 0x7a0003).nopr(); // Unknown, read only at boot time
map(0x7e0000, 0x7e0001).r(FUNC(rltennis_state::io_r)); map(0x7e0000, 0x7e0001).r(FUNC(rltennis_state::io_r));
map(0x7e0002, 0x7e0003).portr("P2"); map(0x7e0002, 0x7e0003).portr("P2");
} }
@ -139,13 +139,13 @@ INPUT_PORTS_END
TIMER_CALLBACK_MEMBER(rltennis_state::sample_player) 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[0]=(( m_data740000 >> m_offset_shift ) & 0xff )<<11;
m_sample_rom_offset[1]=(( m_data760000 >> 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[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)]); 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) 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(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() void rltennis_state::machine_start()
@ -183,7 +183,7 @@ void rltennis_state::ramdac_map(address_map &map)
void rltennis_state::rltennis(machine_config &config) 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_addrmap(AS_PROGRAM, &rltennis_state::rltennis_main);
m_maincpu->set_vblank_int("screen", FUNC(rltennis_state::interrupt)); 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(); SPEAKER(config, "speaker").front_center();
DAC_8BIT_R2R(config, "dac1", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // 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 DAC_8BIT_R2R(config, "dac2", 0).add_route(ALL_OUTPUTS, "speaker", 0.25); // Unknown DAC
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); 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, "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); 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_REGION( 0x080000, "samples2", 0 )
ROM_LOAD( "tennis_3.u52", 0x00000, 0x80000, CRC(517dcd0e) SHA1(b2703e185ee8cf7e115ea07151e7bee8be34948b) ) 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 ROM_END
GAME( 1993, rltennis, 0, rltennis, rltennis, rltennis_state, empty_init, ROT0, "TCH", "Reality Tennis", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // 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 (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 )

View File

@ -35364,6 +35364,7 @@ sarpc_j233 //
@source:rltennis.cpp @source:rltennis.cpp
rltennis // (c) 1993 TCH rltennis // (c) 1993 TCH
rltennisa // (c) 1993 TCH
@source:rm380z.cpp @source:rm380z.cpp
rm380z // rm380z //