summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2021-10-09 10:49:45 +0200
committer hap <happppp@users.noreply.github.com>2021-10-09 10:50:53 +0200
commit90b9a01adad98742e82d9df6968e71cf080db72d (patch)
tree2ddd88885f35f7f42c42b22bacfb157dfd339e56
parentbd16dd2063c4b82c36f221a622f28550842889ee (diff)
New working clones
------------------ Elite Champion Challenger [hap, Berger]
-rw-r--r--src/mame/drivers/fidel_csc.cpp99
-rw-r--r--src/mame/drivers/fidel_elite.cpp9
-rw-r--r--src/mame/mame.lst1
3 files changed, 80 insertions, 29 deletions
diff --git a/src/mame/drivers/fidel_csc.cpp b/src/mame/drivers/fidel_csc.cpp
index 1d2989b5899..41066c667d1 100644
--- a/src/mame/drivers/fidel_csc.cpp
+++ b/src/mame/drivers/fidel_csc.cpp
@@ -10,10 +10,10 @@ Fidelity CSC(and derived) hardware
- Reversi Sensory Challenger
TODO:
-- dump/add original csce
- hook up csce I/O properly, it doesn't have PIAs
-- IRQ Tlow duration, on csc it was measured and turned out to be 73.425us
- but that's too long csce and super9cc
+- verify csc/super9cc irq duration, it was measured 73.425us but that's too long,
+ so it's using the one from csce for now instead
+- is super9cc 101-1024B03 really 2KB? rom chip looks the same as the other ones
*******************************************************************************
@@ -155,15 +155,16 @@ All three of the above are called "segment H".
*******************************************************************************
-Elite Champion Challenger
+Elite Champion Challenger (ELITE)
This is a limited-release chess computer based on the CSC. They removed the PIAs
and did the I/O with TTL instead (PIAs will still work from software point of view).
---------------------------------
-R6502B? CPU @ 4MHz
-32KB ROMs total size, 4KB RAM(8*HM6147P)
+MPS 6502C CPU @ 4MHz
+20KB total ROM size, 4KB RAM(8*HM6147P)
-In the 90s, Wilfried Bucke provided an upgrade to make it more similar to the one
-that won the 1981 Travemünde contest. CPU was changed to R65C02 or UM6502C at 5MHz.
+The "Fidelity X" that won the 1981 Travemünde contest is also on this hardware, with
+a 5MHz CPU and 32KB total ROM size. In the 90s, Wilfried Bucke provided an upgrade
+kit for csce to make it similar to this version, CPU was changed to a R65C02P4.
*******************************************************************************
@@ -173,7 +174,7 @@ Model DS9(Deluxe) has a 5MHz XTAL, but is otherwise same.
Septennial(SCC) is the same as well, but clocked even higher.
---------------------------------
R6502AP CPU, 1.95MHz(3.9MHz resonator)
-2 RAM chips, assume 4KB
+2 RAM chips (2KB + 1KB)
2*8KB ROM + 1*2KB ROM
built-in CB9 module
@@ -239,7 +240,7 @@ public:
// machine drivers
void csc(machine_config &config);
void csce(machine_config &config);
- void su9(machine_config &config);
+ void cscet(machine_config &config);
void rsc(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(rsc_init_board);
@@ -260,7 +261,7 @@ protected:
// address maps
void csc_map(address_map &map);
- void su9_map(address_map &map);
+ void csce_map(address_map &map);
void rsc_map(address_map &map);
// I/O handlers
@@ -281,20 +282,14 @@ protected:
u8 pia1_pb_r();
DECLARE_WRITE_LINE_MEMBER(pia1_ca2_w);
- u8 m_led_data;
- u8 m_7seg_data;
- u8 m_inp_mux;
- u8 m_speech_bank;
+ u8 m_led_data = 0;
+ u8 m_7seg_data = 0;
+ u8 m_inp_mux = 0;
+ u8 m_speech_bank = 0;
};
void csc_state::machine_start()
{
- // zerofill
- m_led_data = 0;
- m_7seg_data = 0;
- m_inp_mux = 0;
- m_speech_bank = 0;
-
// register for savestates
save_item(NAME(m_led_data));
save_item(NAME(m_7seg_data));
@@ -311,6 +306,8 @@ public:
csc_state(mconfig, type, tag)
{ }
+ void su9(machine_config &config);
+
DECLARE_INPUT_CHANGED_MEMBER(su9_cpu_freq) { su9_set_cpu_freq(); }
protected:
@@ -337,7 +334,7 @@ void su9_state::su9_set_cpu_freq()
I/O
******************************************************************************/
-// misc handlers
+// sensorboard handlers
INPUT_CHANGED_MEMBER(csc_state::rsc_init_board)
{
@@ -367,6 +364,9 @@ INPUT_CHANGED_MEMBER(csc_state::rsc_init_board)
m_board->refresh();
}
+
+// misc handlers
+
u16 csc_state::read_inputs()
{
u16 data = 0;
@@ -517,7 +517,7 @@ void csc_state::csc_map(address_map &map)
map(0xc000, 0xffff).rom();
}
-void csc_state::su9_map(address_map &map)
+void csc_state::csce_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x0fff).ram();
@@ -618,7 +618,7 @@ void csc_state::csc(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &csc_state::csc_map);
auto &irq_clock(CLOCK(config, "irq_clock", 38.4_kHz_XTAL/64)); // through 4060 IC, 600Hz
- irq_clock.set_pulse_width(attotime::from_hz(38.4_kHz_XTAL*2)); // edge!
+ irq_clock.set_pulse_width(attotime::from_nsec(10480)); // 74LS221 (4.7K, 5nF), measured ~10.48us
irq_clock.signal_handler().set_inputline(m_maincpu, M6502_IRQ_LINE);
PIA6821(config, m_pia[0], 0);
@@ -659,16 +659,23 @@ void csc_state::csce(machine_config &config)
csc(config);
/* basic machine hardware */
+ m_maincpu->set_clock(4_MHz_XTAL);
+ m_maincpu->set_addrmap(AS_PROGRAM, &csc_state::csce_map);
+}
+
+void csc_state::cscet(machine_config &config)
+{
+ csce(config);
+
+ /* basic machine hardware */
m_maincpu->set_clock(5_MHz_XTAL);
- m_maincpu->set_addrmap(AS_PROGRAM, &csc_state::su9_map);
}
-void csc_state::su9(machine_config &config)
+void su9_state::su9(machine_config &config)
{
csc(config);
/* basic machine hardware */
- m_maincpu->set_addrmap(AS_PROGRAM, &csc_state::su9_map);
config.set_default_layout(layout_fidel_su9);
}
@@ -740,8 +747,42 @@ ROM_START( csc )
ROMX_LOAD("101-64106", 0x0000, 0x2000, CRC(8766e128) SHA1(78c7413bf240159720b131ab70bfbdf4e86eb1e9), ROM_BIOS(3) )
ROM_END
+
ROM_START( csce )
ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_FILL( 0x2000, 0x2000, 0xff) // unpopulated
+ ROM_LOAD("orange", 0xa000, 0x1000, CRC(53348363) SHA1(8465cb15d7d25e7172150774bb1c38caed9c720d) ) // MCM2532C
+ ROM_RELOAD( 0xb000, 0x1000)
+ ROM_LOAD("blue", 0xc000, 0x0800, CRC(49a915c8) SHA1(cfc04dbc2bc780297e5fd24f756c3d1e635b25e6) ) // N82S191N
+ ROM_LOAD("red", 0xc800, 0x0800, CRC(fcdd072b) SHA1(41571d96a7465d3e4a6ce7746e4002fe71173216) ) // N82S191N
+ ROM_LOAD("green", 0xd000, 0x0800, CRC(7537f682) SHA1(6db262aeea6686a65fe4f6f6c3de034bc9859748) ) // N82S191N
+ ROM_LOAD("brown", 0xd800, 0x0800, CRC(a70f4c20) SHA1(a990336726504d480dbb52e695483d39fb00a60e) ) // D2716
+ ROM_LOAD("black", 0xe000, 0x1000, CRC(4eec7f71) SHA1(b11e10492451fe6790deb6177c90a9fb037e4ec6) ) // MCM2532C
+ ROM_LOAD("yellow", 0xf000, 0x1000, CRC(51b9694b) SHA1(46582eb168f1e33fd05dd1554590351355e8afa4) ) // MCM2532C
+
+ // speech ROM
+ ROM_DEFAULT_BIOS("en")
+ ROM_SYSTEM_BIOS(0, "en", "English")
+ ROM_SYSTEM_BIOS(1, "de", "German")
+ ROM_SYSTEM_BIOS(2, "fr", "French")
+ ROM_SYSTEM_BIOS(3, "sp", "Spanish")
+
+ ROM_REGION( 1, "language", 0 )
+ ROMX_FILL(0, 1, 3, ROM_BIOS(0) )
+ ROMX_FILL(0, 1, 2, ROM_BIOS(1) )
+ ROMX_FILL(0, 1, 1, ROM_BIOS(2) )
+ ROMX_FILL(0, 1, 0, ROM_BIOS(3) )
+
+ ROM_REGION( 0x2000, "speech", 0 )
+ ROMX_LOAD("101-32107", 0x0000, 0x1000, CRC(f35784f9) SHA1(348e54a7fa1e8091f89ac656b4da22f28ca2e44d), ROM_BIOS(0) )
+ ROM_RELOAD( 0x1000, 0x1000)
+ ROMX_LOAD("101-64101", 0x0000, 0x2000, CRC(6c85e310) SHA1(20d1d6543c1e6a1f04184a2df2a468f33faec3ff), ROM_BIOS(1) )
+ ROMX_LOAD("101-64105", 0x0000, 0x2000, CRC(fe8c5c18) SHA1(2b64279ab3747ee81c86963c13e78321c6cfa3a3), ROM_BIOS(2) )
+ ROMX_LOAD("101-64106", 0x0000, 0x2000, CRC(8766e128) SHA1(78c7413bf240159720b131ab70bfbdf4e86eb1e9), ROM_BIOS(3) )
+ROM_END
+
+ROM_START( cscet )
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("03", 0x2000, 0x2000, CRC(22e43531) SHA1(696dc019bea3812ae6cf9c2b2c4d3a7b9017807d) )
ROM_LOAD("02", 0xa000, 0x2000, CRC(e593f114) SHA1(4dc5a2456a87c128235958f046cee9502cb3ac65) )
ROM_LOAD("06", 0xc000, 0x0800, CRC(5d41b1e5) SHA1(fe95d8811d8894688336b798212c397bdb216956) )
@@ -777,6 +818,7 @@ ROM_START( super9cc )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD("101-1050a01", 0x2000, 0x2000, CRC(421147e8) SHA1(ccf62f6f218e8992baf30973fe41b35e14a1cc1a) )
ROM_LOAD("101-1024b03", 0xa000, 0x0800, CRC(e8c97455) SHA1(ed2958fc5474253ee8c2eaf27fc64226e12f80ea) )
+ ROM_RELOAD( 0xa800, 0x0800)
ROM_LOAD("101-1024b02", 0xc000, 0x2000, CRC(95004699) SHA1(ea79f43da73267344545df8ad61730f613876c2e) )
ROM_LOAD("101-1024c01", 0xe000, 0x2000, CRC(03904e86) SHA1(bfa0dd9d8541e3ec359a247a3eba543501f727bc) )
@@ -817,7 +859,8 @@ ROM_END
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
CONS( 1981, csc, 0, 0, csc, csc, csc_state, empty_init, "Fidelity Electronics", "Champion Sensory Chess Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1981, csce, 0, 0, csce, csc, csc_state, empty_init, "Fidelity Electronics", u8"Elite Champion Challenger (Travemünde TM version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1981, csce, 0, 0, csce, csc, csc_state, empty_init, "Fidelity Electronics", "Elite Champion Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1981, cscet, csce, 0, cscet, csc, csc_state, empty_init, "Fidelity Electronics", u8"Elite Champion Challenger (Travemünde TM version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1983, super9cc, 0, 0, su9, su9, su9_state, empty_init, "Fidelity Electronics", "Super \"9\" Sensory Chess Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/fidel_elite.cpp b/src/mame/drivers/fidel_elite.cpp
index 608126dc09c..312a7190164 100644
--- a/src/mame/drivers/fidel_elite.cpp
+++ b/src/mame/drivers/fidel_elite.cpp
@@ -6,6 +6,9 @@
Fidelity Elite A/S series hardware (EAS, EAG, PC)
see fidel_eag68k.cpp for 68000-based EAG hardware
+TODO:
+- verify fpres/feas irq active time
+
BTANB:
- feasglab locks up at boot if it was powered off in the middle of the game.
To resolve this, hold the Game Control button while booting to clear nvram.
@@ -464,7 +467,7 @@ void elite_state::pc(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &elite_state::pc_map);
auto &irq_clock(CLOCK(config, "irq_clock", 38.4_kHz_XTAL/64)); // through 4060 IC, 600Hz
- irq_clock.set_pulse_width(attotime::from_hz(38.4_kHz_XTAL*2)); // edge!
+ irq_clock.set_pulse_width(attotime::from_usec(10)); // active for ~10us
irq_clock.signal_handler().set_inputline(m_maincpu, M6502_IRQ_LINE);
SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS);
@@ -530,6 +533,10 @@ void eag_state::eag(machine_config &config)
m_maincpu->set_clock(5_MHz_XTAL); // R65C02P4
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eag_map);
+ auto &irq_clock(CLOCK(config.replace(), "irq_clock", 600)); // from 556 timer (22nF, 82K+pot, 1K), ideal frequency is 600Hz
+ irq_clock.set_pulse_width(attotime::from_nsec(15250)); // active for 15.25us
+ irq_clock.signal_handler().set_inputline(m_maincpu, M6502_IRQ_LINE);
+
config.device_remove("nvram");
NVRAM(config, "nvram.ic8", nvram_device::DEFAULT_ALL_0);
NVRAM(config, "nvram.ic6", nvram_device::DEFAULT_ALL_0);
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index e5f0cb45ec9..de3c4493794 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -13840,6 +13840,7 @@ kishona //
@source:fidel_csc.cpp
csc //
csce //
+cscet //
reversic //
super9cc //