fidel6502: put excellence in its own file (nw)

This commit is contained in:
hap 2019-02-18 02:54:52 +01:00
parent 95f817b54d
commit 058f7c0ae3
7 changed files with 544 additions and 483 deletions

View File

@ -2133,6 +2133,7 @@ files {
MAME_DIR .. "src/mame/includes/fidelbase.h",
MAME_DIR .. "src/mame/drivers/fidel_desdis.cpp",
MAME_DIR .. "src/mame/drivers/fidel_eag68k.cpp",
MAME_DIR .. "src/mame/drivers/fidel_excel.cpp",
MAME_DIR .. "src/mame/drivers/fidel_sc6.cpp",
MAME_DIR .. "src/mame/drivers/fidel6502.cpp",
}

View File

@ -18,8 +18,6 @@
Currently, a dummy timer workaround is needed, or it's much worse.
Is the problem here is due to timing of CPU addressbus changes? We can only 'sense'
the addressbus at read or write accesses.
- granits gives error beeps at start, need to press clear to play
- granits buttons seem too sensitive
- finish fphantom emulation
******************************************************************************
@ -280,132 +278,6 @@ The keypad is read through a 74HC251, where S0,1,2 is from CPU A0,1,2, Y is conn
If control Q4 is set, printer data can be read from I0.
******************************************************************************
Voice Excellence (model 6092)
----------------
PCB 1: 510.1117A02, appears to be identical to other "Excellence" boards
CPU: GTE G65SC102P-3, 32 KB PRG ROM: AMI 101-1080A01(IC5), 8192x8 SRAM SRM2264C10(IC6)
2 rows of LEDs on the side: 1*8 green, 1*8 red
PCB 2: 510.1117A01
Speech: TSI S14001A, 32 KB ROM: AMI 101-1081A01(IC2)
Dip Switches set ROM A13 and ROM A14, on the side of the board
ROM A12 is tied to S14001A's A11 (yuck)
ROM A11 is however tied to the CPU's XYZ
0000_07FF - Spanish 1/4
0800_0FFF - Spanish 3/4
1000_17FF - Spanish 2/4
1800_1FFF - Spanish 4/4
2000_27FF - French 1/4
2800_2FFF - French 3/4
3000_3FFF - French 2/4
3800_3FFF - French 4/4
4000_47FF - German 1/4
4800_4FFF - German 3/4
5000_57FF - German 2/4
5800_5FFF - German 4/4
6000_67FF - English 1/2
6800_6FFF - Bridge Challenger 1/2
7000_77FF - English 2/2
7800_7FFF - Bridge Challenger 2/2
------------------
RE info by hap, based on PCB photos
Memory map:
-----------
0000-3FFF: 8K RAM (SRM2264)
4000-7FFF: control (R/W)
8000-FFFF: 32K ROM (M27256 compatible)
control (W):
------------
CPU A0-A2 to 3*74259, CPU Dx to D (_C unused)
CPU D0:
- Q4,Q5: led commons
- Q6,Q7,Q2,Q1: 7seg panel digit select
- Q0-Q3: 7442 A0-A3
+ 0-7: led data
+ 0-8: keypad mux
+ 9: buzzer out
CPU D1: (model 6093)
- Q0-Q7: 7seg data
CPU D2: (model 6092)
- Q0-Q5: TSI C0-C5
- Q6: TSI START pin
- Q7: TSI ROM A11
A11 from TSI is tied to TSI ROM A12(!)
TSI ROM A13,A14 are hardwired to the 2 language switches.
Sound comes from the Audio out pin, digital out pins are N/C.
control (R):
------------
CPU A0-A2 to 2*74251, CPU Dx to output
CPU D7 to Y:
- D0-D7: keypad row data
CPU D6 to W: (model 6092, tied to VCC otherwise)
- D0,D1: language switches
- D2-D6: VCC
- D7: TSI BUSY
------------------
One interesting clone of The Excellence is the Computerchess Playmate-2. It was
produced in 1989 by SPS(Bulgaria) and RRR(Riga Radio Factory). The chess program
ROM is identical to Excellence EP12. All internal circuitry is the same, the only
difference is the capacitor driving the 555 for IRQ is 10nf instead of 22nf.
What makes it unique is the addition of a chess clock.
connector pinout from main pcb:
1) 5V
2) GND
3) 74HC259.pin9 (Q4) = Row LED driving
4) 74HC259.pin10 (Q5) = Column LED driving
5) 74HC259.pin12 (Q7) = Bat. Low signal
6) 74HC42.pin4 (Q3) = Col-D/Row-4 -> 'White Move' if D-LED blinks
The extra board has a 7474, a К1016ХЛ1 (RTC, or MCU clock driver), a 4-digit
VFD display, and some buttons for controlling the clock. IRQ frequency is doubled
presumedly for using the blinking led as seconds counter. It only tracks player time,
not of the opponent. And it obviously doesn't show chessmove coordinates either.
******************************************************************************
Designer series:
Designer 2000 (model 6102)
----------------
8KB RAM(KM6264AL-10), 32KB ROM(AMI 101.1077A01)
Ricoh RP65C02G CPU, 3MHz XTAL
PCB label 510.1129A01
basically same as (Par) Excellence hardware, reskinned board
Designer 2100 (model 6103): exactly same, but running at 5MHz
Designer 2100 Display (model 6106)
----------------
8KB RAM(MS6264L-10), 2*32KB ROM(27C256)
WDC W65C02P-6 CPU, 6MHz XTAL
4-digit LCD panel
PCB label 510.1130A01
Designer 2000 Display (model 6105): same hardware, no bookrom, 3MHz
Designer 1500 is on 80C50 hardware
******************************************************************************
@ -457,11 +329,8 @@ I/O is via TTL, very similar to Designer Display
#include "fidel_as12.lh" // clickable
#include "fidel_chesster.lh" // clickable
#include "fidel_csc.lh" // clickable, with preliminary boardpieces simulation
#include "fidel_des.lh" // clickable
#include "fidel_eag.lh" // clickable
#include "fidel_eas.lh" // clickable
#include "fidel_ex.lh" // clickable
#include "fidel_exd.lh" // clickable
#include "fidel_pc.lh" // clickable
#include "fidel_playmatic.lh" // clickable
#include "fidel_rsc_v2.lh" // clickable
@ -617,32 +486,6 @@ void sc9c_state::sc9c_set_cpu_freq()
class excel_state : public fidelbase_state
{
public:
excel_state(const machine_config &mconfig, device_type type, const char *tag) :
fidelbase_state(mconfig, type, tag)
{ }
void fexcel(machine_config &config);
void fexcelb(machine_config &config);
void fexcel4(machine_config &config);
void fexceld(machine_config &config);
void fexcelv(machine_config &config);
void fexcelp(machine_config &config);
void granits(machine_config &config);
void fdes2100(machine_config &config);
void fdes2000(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(fexcelv_bankswitch);
private:
DECLARE_READ8_MEMBER(fexcelv_speech_r);
DECLARE_WRITE8_MEMBER(fexcel_ttl_w);
DECLARE_READ8_MEMBER(fexcelb_ttl_r);
void fexcel_map(address_map &map);
void fexcelb_map(address_map &map);
};
class chesster_state : public fidelbase_state
{
@ -1133,91 +976,6 @@ READ8_MEMBER(fidel6502_state::as12_input_r)
/******************************************************************************
Excellence
******************************************************************************/
// misc handlers
INPUT_CHANGED_MEMBER(excel_state::fexcelv_bankswitch)
{
// tied to speech ROM highest bits
m_speech->force_update();
m_speech_bank = (m_speech_bank & 1) | newval << 1;
}
READ8_MEMBER(excel_state::fexcelv_speech_r)
{
// TSI A11 is A12, program controls A11, user controls A13,A14(language switches)
offset = (offset & 0x7ff) | (offset << 1 & 0x1000);
return m_speech_rom[offset | (m_speech_bank << 11 & 0x800) | (~m_speech_bank << 12 & 0x6000)];
}
// TTL
WRITE8_MEMBER(excel_state::fexcel_ttl_w)
{
// a0-a2,d0: 74259(1)
u8 mask = 1 << offset;
m_led_select = (m_led_select & ~mask) | ((data & 1) ? mask : 0);
// 74259 Q0-Q3: 7442 a0-a3
// 7442 0-8: led data, input mux
u16 sel = 1 << (m_led_select & 0xf) & 0x3ff;
u8 led_data = sel & 0xff;
m_inp_mux = sel & 0x1ff;
// 7442 9: speaker out
m_dac->write(BIT(sel, 9));
// 74259 Q4-Q7,Q2,Q1: digit/led select (active low)
u8 led_sel = ~bitswap<8>(m_led_select,0,3,1,2,7,6,5,4) & 0x3f;
// a0-a2,d1: digit segment data (model 6093)
m_7seg_data = (m_7seg_data & ~mask) | ((data & 2) ? mask : 0);
u8 seg_data = bitswap<8>(m_7seg_data,0,1,3,2,7,5,6,4);
// update display: 4 7seg leds, 2*8 chessboard leds
for (int i = 0; i < 6; i++)
m_display_state[i] = (led_sel >> i & 1) ? ((i < 2) ? led_data : seg_data) : 0;
set_display_size(8, 2+4);
set_display_segmask(0x3c, 0x7f);
display_update();
// speech (model 6092)
if (m_speech != nullptr)
{
// a0-a2,d2: 74259(2) to speech board
m_speech_data = (m_speech_data & ~mask) | ((data & 4) ? mask : 0);
// 74259 Q6: TSI ROM A11
m_speech->force_update(); // update stream to now
m_speech_bank = (m_speech_bank & ~1) | (m_speech_data >> 6 & 1);
// Q0-Q5: TSI C0-C5
// Q7: TSI START line
m_speech->data_w(space, 0, m_speech_data & 0x3f);
m_speech->start_w(m_speech_data >> 7 & 1);
}
}
READ8_MEMBER(excel_state::fexcelb_ttl_r)
{
u8 d7 = 0x80;
// 74259(1) Q7 + 74251 I0: battery status
if (m_inp_matrix[10] != nullptr && m_inp_mux == 1 && ~m_led_select & 0x80)
d7 = m_inp_matrix[10]->read() & 0x80;
// a0-a2,d6: from speech board: language switches and TSI BUSY line, otherwise tied to VCC
u8 d6 = (m_inp_matrix[9].read_safe(0xff) >> offset & 1) ? 0x40 : 0;
// a0-a2,d7: multiplexed inputs (active low)
return ((read_inputs(9) >> offset & 1) ? 0 : d7) | d6 | 0x3f;
}
@ -1411,22 +1169,7 @@ void fidel6502_state::as12_map(address_map &map)
}
// Excellence
void excel_state::fexcel_map(address_map &map)
{
map(0x0000, 0x07ff).mirror(0x3800).ram();
map(0x4000, 0x4007).mirror(0x3ff8).rw(FUNC(excel_state::fexcelb_ttl_r), FUNC(excel_state::fexcel_ttl_w));
//map(0x8000, 0x8000).nopr(); // checks for opening book module, but hw doesn't have a module slot
map(0xc000, 0xffff).rom();
}
void excel_state::fexcelb_map(address_map &map)
{
map(0x0000, 0x1fff).mirror(0x2000).ram();
map(0x4000, 0x4007).mirror(0x3ff8).rw(FUNC(excel_state::fexcelb_ttl_r), FUNC(excel_state::fexcel_ttl_w));
map(0x8000, 0xffff).rom();
}
// Designer Display, Phantom, Chesster
@ -1736,49 +1479,6 @@ static INPUT_PORTS_START( sc9c )
INPUT_PORTS_END
static INPUT_PORTS_START( fexcelb )
PORT_INCLUDE( fidel_cb_buttons )
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Move / Pawn")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Hint / Knight")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Take Back / Bishop")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Level / Rook")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Options / Queen")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Verify / King")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_N) PORT_NAME("New Game")
INPUT_PORTS_END
static INPUT_PORTS_START( fexcelv )
PORT_INCLUDE( fexcelb )
PORT_START("IN.9")
PORT_CONFNAME( 0x03, 0x00, DEF_STR( Language ) ) PORT_CHANGED_MEMBER(DEVICE_SELF, excel_state, fexcelv_bankswitch, 0)
PORT_CONFSETTING( 0x00, DEF_STR( English ) )
PORT_CONFSETTING( 0x01, DEF_STR( German ) )
PORT_CONFSETTING( 0x02, DEF_STR( French ) )
PORT_CONFSETTING( 0x03, DEF_STR( Spanish ) )
PORT_BIT(0x7c, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("speech", s14001a_device, busy_r)
INPUT_PORTS_END
static INPUT_PORTS_START( fexcel )
PORT_INCLUDE( fexcelb )
PORT_START("IN.10")
PORT_CONFNAME( 0x80, 0x00, "Battery Status" )
PORT_CONFSETTING( 0x80, "Low" )
PORT_CONFSETTING( 0x00, DEF_STR( Normal ) )
INPUT_PORTS_END
static INPUT_PORTS_START( fdes )
PORT_INCLUDE( fexcel )
PORT_MODIFY("IN.10")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED) // no low-voltage detection circuit (still works in software though)
INPUT_PORTS_END
static INPUT_PORTS_START( chesster )
PORT_INCLUDE( fidel_cb_buttons )
@ -2065,105 +1765,6 @@ void fidel6502_state::as12(machine_config &config)
config.set_default_layout(layout_fidel_as12);
}
void excel_state::fexcel(machine_config &config)
{
/* basic machine hardware */
M65SC02(config, m_maincpu, 12_MHz_XTAL/4); // G65SC102P-3, 12.0M ceramic resonator
m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcel_map);
const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K)
TIMER(config, m_irq_on).configure_periodic(FUNC(excel_state::irq_on<M6502_IRQ_LINE>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(15250)); // active for 15.25us
TIMER(config, "irq_off").configure_periodic(FUNC(excel_state::irq_off<M6502_IRQ_LINE>), irq_period);
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
config.set_default_layout(layout_fidel_ex);
/* sound hardware */
SPEAKER(config, "speaker").front_center();
DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25);
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
vref.set_output(5.0);
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
}
void excel_state::fexcel4(machine_config &config)
{
fexcel(config);
/* basic machine hardware */
R65C02(config.replace(), m_maincpu, 4_MHz_XTAL); // R65C02P4
m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcel_map);
}
void excel_state::fexcelb(machine_config &config)
{
fexcel(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcelb_map);
}
void excel_state::fexcelp(machine_config &config)
{
fexcel(config);
/* basic machine hardware */
R65C02(config.replace(), m_maincpu, 5_MHz_XTAL); // R65C02P4
m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcelb_map);
}
void excel_state::granits(machine_config &config)
{
fexcelp(config);
/* basic machine hardware */
m_maincpu->set_clock(8_MHz_XTAL); // overclocked
}
void excel_state::fdes2100(machine_config &config)
{
fexcel(config);
/* basic machine hardware */
M65C02(config.replace(), m_maincpu, 5_MHz_XTAL); // WDC 65C02
m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcelb_map);
// change irq timer frequency
const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K)
TIMER(config.replace(), m_irq_on).configure_periodic(FUNC(excel_state::irq_on<M6502_IRQ_LINE>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(15250)); // active for 15.25us
TIMER(config.replace(), "irq_off").configure_periodic(FUNC(excel_state::irq_off<M6502_IRQ_LINE>), irq_period);
config.set_default_layout(layout_fidel_des);
}
void excel_state::fdes2000(machine_config &config)
{
fdes2100(config);
/* basic machine hardware */
R65C02(config.replace(), m_maincpu, 3_MHz_XTAL); // RP65C02G
m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcelb_map);
}
void excel_state::fexcelv(machine_config &config)
{
fexcelb(config);
/* sound hardware */
S14001A(config, m_speech, 25000); // R/C circuit, around 25khz
m_speech->ext_read().set(FUNC(excel_state::fexcelv_speech_r));
m_speech->add_route(ALL_OUTPUTS, "speaker", 0.75);
}
void excel_state::fexceld(machine_config &config)
{
fexcelb(config);
/* basic machine hardware */
config.set_default_layout(layout_fidel_exd);
}
void fidel6502_state::fphantom(machine_config &config)
@ -2653,65 +2254,6 @@ ROM_START( feleg ) // model AS12(or 6085), PCB label 510-1084B01
ROM_END
ROM_START( fexcel ) // model 6080(B), PCB label 510.1117A02
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1080a01.ic5", 0x8000, 0x8000, CRC(846f8e40) SHA1(4e1d5b08d5ff3422192b54fa82cb3f505a69a971) )
ROM_END
ROM_START( fexceld ) // model 6093, PCB label 510.1117A02
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1080a01.ic5", 0x8000, 0x8000, CRC(846f8e40) SHA1(4e1d5b08d5ff3422192b54fa82cb3f505a69a971) ) // same rom as fexcel
ROM_END
ROM_START( fexcelv ) // model 6092, PCB label 510.1117A02, sound PCB 510.1117A01
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1080a01.ic5", 0x8000, 0x8000, CRC(846f8e40) SHA1(4e1d5b08d5ff3422192b54fa82cb3f505a69a971) ) // PCB1, M27256, same rom as fexcel
ROM_REGION( 0x8000, "speech", 0 )
ROM_LOAD("101-1081a01.ic2", 0x0000, 0x8000, CRC(c8ae1607) SHA1(6491ce6be60ed77f3dd931c0ca17616f13af943e) ) // PCB2, M27256
ROM_END
ROM_START( fexcel12 ) // model EP12, PCB label 510-1099A01
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1072a01.ic5", 0xc000, 0x4000, CRC(212b006d) SHA1(242ff851b0841cbec66bbada6a730da021010e2c) )
ROM_END
ROM_START( fexcel124 ) // model EP12, PCB label 510-1099A01
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1073a01.ic5", 0xc000, 0x4000, CRC(3e221534) SHA1(7516bc6a8aab9d8ac30ac1a9317630a6aa9ac1a0) )
ROM_END
ROM_START( fexcela ) // model 6080, PCB label 510-1099A01(manuf.1985) or 510-1099B01(manuf.1986)
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1072b01.ic5", 0xc000, 0x4000, CRC(fd2f6064) SHA1(f84bb98bdb9565a04891eb6820597d7aecc90c21) ) // RCA
ROM_END
ROM_START( fexcelp ) // model 6083, PCB label 510-1099A01
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1077a01.ic5", 0x8000, 0x8000, CRC(62006320) SHA1(1d6370973dbae42c54639b261cc81e32cdfc1d5d) )
ROM_END
ROM_START( fexcelpb ) // model 6083, PCB label 510-1099B01
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("par_ex.ic5", 0x8000, 0x8000, CRC(0d17b0f0) SHA1(3a6070fd4718c62b62ff0f08637bb6eb84eb9a1c) ) // GI 27C256, no label, only 1 byte difference, assume bugfix in bookrom
ROM_END
ROM_START( granits ) // modified SC12 board, overclocked Par Excellence program
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("granit_s-4", 0x8000, 0x8000, CRC(274d6aff) SHA1(c8d943b2f15422ac62f539b568f5509cbce568a3) )
ROM_END
ROM_START( fdes2000 ) // model 6102, PCB label 510.1129A01
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1077a01.ic5", 0x8000, 0x8000, CRC(62006320) SHA1(1d6370973dbae42c54639b261cc81e32cdfc1d5d) ) // AMI, same label as fexcelp
ROM_END
ROM_START( fdes2100 ) // model 6103, PCB label 510.1129A01
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1077a01.ic5", 0x8000, 0x8000, CRC(62006320) SHA1(1d6370973dbae42c54639b261cc81e32cdfc1d5d) ) // same as fdes2000
ROM_END
ROM_START( fphantom ) // model 6100, PCB label 510.1128A01
ROM_REGION( 0x10000, "maincpu", 0 )
@ -2798,19 +2340,6 @@ CONS( 1984, fscc12b, fscc12, 0, sc12b, sc12b, fidel6502_state, empt
CONS( 1985, feleg, 0, 0, as12, as12, fidel6502_state, empty_init, "Fidelity Electronics", "Elegance Chess Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
CONS( 1987, fexcel, 0, 0, fexcelb, fexcelb, excel_state, empty_init, "Fidelity Electronics", "The Excellence (model 6080B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1987, fexcelv, fexcel, 0, fexcelv, fexcelv, excel_state, empty_init, "Fidelity Electronics", "Voice Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1987, fexceld, fexcel, 0, fexceld, fexcelb, excel_state, empty_init, "Fidelity Electronics", "Excel Display", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1985, fexcel12, fexcel, 0, fexcel, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Excellence (model EP12, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) // 1st version of The Excellence
CONS( 1985, fexcel124, fexcel, 0, fexcel4, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Excellence (model EP12, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1985, fexcela, fexcel, 0, fexcel, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Excellence (model 6080)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1986, fexcelp, 0, 0, fexcelp, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Par Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1986, fexcelpb, fexcelp, 0, fexcelp, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Par Excellence (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1986, granits, fexcelp, 0, granits, fexcel, excel_state, empty_init, "hack (RCS)", "Granit 'S'", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1988, fdes2000, fexcelp, 0, fdes2000, fdes, excel_state, empty_init, "Fidelity Electronics", "Designer 2000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1988, fdes2100, fexcelp, 0, fdes2100, fdes, excel_state, empty_init, "Fidelity Electronics", "Designer 2100", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1988, fphantom, 0, 0, fphantom, fphantom, fidel6502_state, init_fphantom, "Fidelity Electronics", "Phantom (Fidelity)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
CONS( 1990, chesster, 0, 0, chesster, chesster, chesster_state, init_chesster, "Fidelity Electronics", "Chesster Challenger (V1.3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )

View File

@ -57,6 +57,7 @@ public:
fidelbase_state(mconfig, type, tag)
{ }
// machine drivers
void fdes2000d(machine_config &config);
void fdes2100d(machine_config &config);
@ -78,12 +79,14 @@ public:
desdis_state(mconfig, type, tag)
{ }
// machine drivers
void fdes2265(machine_config &config);
void fdes2325(machine_config &config);
void init_fdes2265();
private:
// address maps
void fdes2265_map(address_map &map);
void fdes2325_map(address_map &map);
@ -214,7 +217,6 @@ void desmas_state::fdes2325_map(address_map &map)
/******************************************************************************
Input Ports
******************************************************************************/

View File

@ -177,6 +177,7 @@ public:
m_ram(*this, "ram")
{ }
// machine drivers
void eag_base(machine_config &config);
void eag(machine_config &config);
void eagv5(machine_config &config);
@ -191,6 +192,7 @@ protected:
// devices/pointers
optional_device<ram_device> m_ram;
// address maps
void eag_map(address_map &map);
void eagv7_map(address_map &map);
void eagv11_map(address_map &map);
@ -212,11 +214,13 @@ public:
eag_state(mconfig, type, tag)
{ }
// machine drivers
void fex68k(machine_config &config);
void fex68km2(machine_config &config);
void fex68km3(machine_config &config);
private:
// address maps
void fex68k_map(address_map &map);
void fex68km2_map(address_map &map);
void fex68km3_map(address_map &map);

View File

@ -0,0 +1,522 @@
// license:BSD-3-Clause
// copyright-holders:hap
// thanks-to:Berger,yoyo_chessboard
/******************************************************************************
Fidelity Excellence series hardware (for Excel 68000, see fidel_eag68k.cpp)
TODO:
- granits gives error beeps at start, need to press clear to play
- granits buttons seem too sensitive
******************************************************************************
Voice Excellence (model 6092)
----------------
PCB 1: 510.1117A02, appears to be identical to other "Excellence" boards
CPU: GTE G65SC102P-3, 32 KB PRG ROM: AMI 101-1080A01(IC5), 8192x8 SRAM SRM2264C10(IC6)
2 rows of LEDs on the side: 1*8 green, 1*8 red
PCB 2: 510.1117A01
Speech: TSI S14001A, 32 KB ROM: AMI 101-1081A01(IC2)
Dip Switches set ROM A13 and ROM A14, on the side of the board
ROM A12 is tied to S14001A's A11 (yuck)
ROM A11 is however tied to the CPU's XYZ
0000_07FF - Spanish 1/4
0800_0FFF - Spanish 3/4
1000_17FF - Spanish 2/4
1800_1FFF - Spanish 4/4
2000_27FF - French 1/4
2800_2FFF - French 3/4
3000_3FFF - French 2/4
3800_3FFF - French 4/4
4000_47FF - German 1/4
4800_4FFF - German 3/4
5000_57FF - German 2/4
5800_5FFF - German 4/4
6000_67FF - English 1/2
6800_6FFF - Bridge Challenger 1/2
7000_77FF - English 2/2
7800_7FFF - Bridge Challenger 2/2
------------------
RE info by hap, based on PCB photos
Memory map:
-----------
0000-3FFF: 8K RAM (SRM2264)
4000-7FFF: control (R/W)
8000-FFFF: 32K ROM (M27256 compatible)
control (W):
------------
CPU A0-A2 to 3*74259, CPU Dx to D (_C unused)
CPU D0:
- Q4,Q5: led commons
- Q6,Q7,Q2,Q1: 7seg panel digit select
- Q0-Q3: 7442 A0-A3
+ 0-7: led data
+ 0-8: keypad mux
+ 9: buzzer out
CPU D1: (model 6093)
- Q0-Q7: 7seg data
CPU D2: (model 6092)
- Q0-Q5: TSI C0-C5
- Q6: TSI START pin
- Q7: TSI ROM A11
A11 from TSI is tied to TSI ROM A12(!)
TSI ROM A13,A14 are hardwired to the 2 language switches.
Sound comes from the Audio out pin, digital out pins are N/C.
control (R):
------------
CPU A0-A2 to 2*74251, CPU Dx to output
CPU D7 to Y:
- D0-D7: keypad row data
CPU D6 to W: (model 6092, tied to VCC otherwise)
- D0,D1: language switches
- D2-D6: VCC
- D7: TSI BUSY
------------------
One interesting clone of The Excellence is the Computerchess Playmate-2. It was
produced in 1989 by SPS(Bulgaria) and RRR(Riga Radio Factory). The chess program
ROM is identical to Excellence EP12. All internal circuitry is the same, the only
difference is the capacitor driving the 555 for IRQ is 10nf instead of 22nf.
What makes it unique is the addition of a chess clock.
connector pinout from main pcb:
1) 5V
2) GND
3) 74HC259.pin9 (Q4) = Row LED driving
4) 74HC259.pin10 (Q5) = Column LED driving
5) 74HC259.pin12 (Q7) = Bat. Low signal
6) 74HC42.pin4 (Q3) = Col-D/Row-4 -> 'White Move' if D-LED blinks
The extra board has a 7474, a К1016ХЛ1 (RTC, or MCU clock driver), a 4-digit
VFD display, and some buttons for controlling the clock. IRQ frequency is doubled
presumedly for using the blinking led as seconds counter. It only tracks player time,
not of the opponent. And it obviously doesn't show chessmove coordinates either.
******************************************************************************
Designer 2000 (model 6102)
----------------
8KB RAM(KM6264AL-10), 32KB ROM(AMI 101.1077A01)
Ricoh RP65C02G CPU, 3MHz XTAL
PCB label 510.1129A01
basically same as (Par) Excellence hardware, reskinned board
Designer 2100 (model 6103): exactly same, but running at 5MHz
(Designer 1500 is on 80C50 hardware)
******************************************************************************/
#include "emu.h"
#include "includes/fidelbase.h"
#include "cpu/m6502/r65c02.h"
#include "cpu/m6502/m65sc02.h"
#include "sound/volt_reg.h"
#include "speaker.h"
// internal artwork
#include "fidel_des.lh" // clickable
#include "fidel_ex.lh" // clickable
#include "fidel_exd.lh" // clickable
namespace {
class excel_state : public fidelbase_state
{
public:
excel_state(const machine_config &mconfig, device_type type, const char *tag) :
fidelbase_state(mconfig, type, tag)
{ }
// machine drivers
void fexcel(machine_config &config);
void fexcelb(machine_config &config);
void fexcel4(machine_config &config);
void fexceld(machine_config &config);
void fexcelv(machine_config &config);
void fexcelp(machine_config &config);
void granits(machine_config &config);
void fdes2100(machine_config &config);
void fdes2000(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(lan_bankswitch);
private:
// address maps
void fexcel_map(address_map &map);
void fexcelb_map(address_map &map);
// I/O handlers
DECLARE_READ8_MEMBER(speech_r);
DECLARE_WRITE8_MEMBER(ttl_w);
DECLARE_READ8_MEMBER(ttl_r);
};
/******************************************************************************
Devices, I/O
******************************************************************************/
// misc handlers
INPUT_CHANGED_MEMBER(excel_state::lan_bankswitch)
{
// tied to speech ROM highest bits
m_speech->force_update();
m_speech_bank = (m_speech_bank & 1) | newval << 1;
}
READ8_MEMBER(excel_state::speech_r)
{
// TSI A11 is A12, program controls A11, user controls A13,A14(language switches)
offset = (offset & 0x7ff) | (offset << 1 & 0x1000);
return m_speech_rom[offset | (m_speech_bank << 11 & 0x800) | (~m_speech_bank << 12 & 0x6000)];
}
// TTL
WRITE8_MEMBER(excel_state::ttl_w)
{
// a0-a2,d0: 74259(1)
u8 mask = 1 << offset;
m_led_select = (m_led_select & ~mask) | ((data & 1) ? mask : 0);
// 74259 Q0-Q3: 7442 a0-a3
// 7442 0-8: led data, input mux
u16 sel = 1 << (m_led_select & 0xf) & 0x3ff;
u8 led_data = sel & 0xff;
m_inp_mux = sel & 0x1ff;
// 7442 9: speaker out
m_dac->write(BIT(sel, 9));
// 74259 Q4-Q7,Q2,Q1: digit/led select (active low)
u8 led_sel = ~bitswap<8>(m_led_select,0,3,1,2,7,6,5,4) & 0x3f;
// a0-a2,d1: digit segment data (model 6093)
m_7seg_data = (m_7seg_data & ~mask) | ((data & 2) ? mask : 0);
u8 seg_data = bitswap<8>(m_7seg_data,0,1,3,2,7,5,6,4);
// update display: 4 7seg leds, 2*8 chessboard leds
for (int i = 0; i < 6; i++)
m_display_state[i] = (led_sel >> i & 1) ? ((i < 2) ? led_data : seg_data) : 0;
set_display_size(8, 2+4);
set_display_segmask(0x3c, 0x7f);
display_update();
// speech (model 6092)
if (m_speech != nullptr)
{
// a0-a2,d2: 74259(2) to speech board
m_speech_data = (m_speech_data & ~mask) | ((data & 4) ? mask : 0);
// 74259 Q6: TSI ROM A11
m_speech->force_update(); // update stream to now
m_speech_bank = (m_speech_bank & ~1) | (m_speech_data >> 6 & 1);
// Q0-Q5: TSI C0-C5
// Q7: TSI START line
m_speech->data_w(space, 0, m_speech_data & 0x3f);
m_speech->start_w(m_speech_data >> 7 & 1);
}
}
READ8_MEMBER(excel_state::ttl_r)
{
u8 d7 = 0x80;
// 74259(1) Q7 + 74251 I0: battery status
if (m_inp_matrix[10] != nullptr && m_inp_mux == 1 && ~m_led_select & 0x80)
d7 = m_inp_matrix[10]->read() & 0x80;
// a0-a2,d6: from speech board: language switches and TSI BUSY line, otherwise tied to VCC
u8 d6 = (m_inp_matrix[9].read_safe(0xff) >> offset & 1) ? 0x40 : 0;
// a0-a2,d7: multiplexed inputs (active low)
return ((read_inputs(9) >> offset & 1) ? 0 : d7) | d6 | 0x3f;
}
/******************************************************************************
Address Maps
******************************************************************************/
void excel_state::fexcel_map(address_map &map)
{
map(0x0000, 0x07ff).mirror(0x3800).ram();
map(0x4000, 0x4007).mirror(0x3ff8).rw(FUNC(excel_state::ttl_r), FUNC(excel_state::ttl_w));
//map(0x8000, 0x8000).nopr(); // checks for opening book module, but hw doesn't have a module slot
map(0xc000, 0xffff).rom();
}
void excel_state::fexcelb_map(address_map &map)
{
map(0x0000, 0x1fff).mirror(0x2000).ram();
map(0x4000, 0x4007).mirror(0x3ff8).rw(FUNC(excel_state::ttl_r), FUNC(excel_state::ttl_w));
map(0x8000, 0xffff).rom();
}
/******************************************************************************
Input Ports
******************************************************************************/
static INPUT_PORTS_START( fexcelb )
PORT_INCLUDE( fidel_cb_buttons )
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Move / Pawn")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Hint / Knight")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Take Back / Bishop")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Level / Rook")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Options / Queen")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Verify / King")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_N) PORT_NAME("New Game")
INPUT_PORTS_END
static INPUT_PORTS_START( fexcelv )
PORT_INCLUDE( fexcelb )
PORT_START("IN.9")
PORT_CONFNAME( 0x03, 0x00, DEF_STR( Language ) ) PORT_CHANGED_MEMBER(DEVICE_SELF, excel_state, lan_bankswitch, 0)
PORT_CONFSETTING( 0x00, DEF_STR( English ) )
PORT_CONFSETTING( 0x01, DEF_STR( German ) )
PORT_CONFSETTING( 0x02, DEF_STR( French ) )
PORT_CONFSETTING( 0x03, DEF_STR( Spanish ) )
PORT_BIT(0x7c, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("speech", s14001a_device, busy_r)
INPUT_PORTS_END
static INPUT_PORTS_START( fexcel )
PORT_INCLUDE( fexcelb )
PORT_START("IN.10")
PORT_CONFNAME( 0x80, 0x00, "Battery Status" )
PORT_CONFSETTING( 0x80, "Low" )
PORT_CONFSETTING( 0x00, DEF_STR( Normal ) )
INPUT_PORTS_END
static INPUT_PORTS_START( fdes )
PORT_INCLUDE( fexcel )
PORT_MODIFY("IN.10")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED) // no low-voltage detection circuit (still works in software though)
INPUT_PORTS_END
/******************************************************************************
Machine Drivers
******************************************************************************/
void excel_state::fexcel(machine_config &config)
{
/* basic machine hardware */
M65SC02(config, m_maincpu, 12_MHz_XTAL/4); // G65SC102P-3, 12.0M ceramic resonator
m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcel_map);
const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K)
TIMER(config, m_irq_on).configure_periodic(FUNC(excel_state::irq_on<M6502_IRQ_LINE>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(15250)); // active for 15.25us
TIMER(config, "irq_off").configure_periodic(FUNC(excel_state::irq_off<M6502_IRQ_LINE>), irq_period);
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
config.set_default_layout(layout_fidel_ex);
/* sound hardware */
SPEAKER(config, "speaker").front_center();
DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25);
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
vref.set_output(5.0);
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
}
void excel_state::fexcel4(machine_config &config)
{
fexcel(config);
/* basic machine hardware */
R65C02(config.replace(), m_maincpu, 4_MHz_XTAL); // R65C02P4
m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcel_map);
}
void excel_state::fexcelb(machine_config &config)
{
fexcel(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcelb_map);
}
void excel_state::fexcelp(machine_config &config)
{
fexcel(config);
/* basic machine hardware */
R65C02(config.replace(), m_maincpu, 5_MHz_XTAL); // R65C02P4
m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcelb_map);
}
void excel_state::granits(machine_config &config)
{
fexcelp(config);
/* basic machine hardware */
m_maincpu->set_clock(8_MHz_XTAL); // overclocked
}
void excel_state::fdes2100(machine_config &config)
{
fexcel(config);
/* basic machine hardware */
M65C02(config.replace(), m_maincpu, 5_MHz_XTAL); // WDC 65C02
m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcelb_map);
// change irq timer frequency
const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K)
TIMER(config.replace(), m_irq_on).configure_periodic(FUNC(excel_state::irq_on<M6502_IRQ_LINE>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(15250)); // active for 15.25us
TIMER(config.replace(), "irq_off").configure_periodic(FUNC(excel_state::irq_off<M6502_IRQ_LINE>), irq_period);
config.set_default_layout(layout_fidel_des);
}
void excel_state::fdes2000(machine_config &config)
{
fdes2100(config);
/* basic machine hardware */
R65C02(config.replace(), m_maincpu, 3_MHz_XTAL); // RP65C02G
m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcelb_map);
}
void excel_state::fexcelv(machine_config &config)
{
fexcelb(config);
/* sound hardware */
S14001A(config, m_speech, 25000); // R/C circuit, around 25khz
m_speech->ext_read().set(FUNC(excel_state::speech_r));
m_speech->add_route(ALL_OUTPUTS, "speaker", 0.75);
}
void excel_state::fexceld(machine_config &config)
{
fexcelb(config);
/* basic machine hardware */
config.set_default_layout(layout_fidel_exd);
}
/******************************************************************************
ROM Definitions
******************************************************************************/
ROM_START( fexcel ) // model 6080(B), PCB label 510.1117A02
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1080a01.ic5", 0x8000, 0x8000, CRC(846f8e40) SHA1(4e1d5b08d5ff3422192b54fa82cb3f505a69a971) )
ROM_END
ROM_START( fexceld ) // model 6093, PCB label 510.1117A02
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1080a01.ic5", 0x8000, 0x8000, CRC(846f8e40) SHA1(4e1d5b08d5ff3422192b54fa82cb3f505a69a971) ) // same rom as fexcel
ROM_END
ROM_START( fexcelv ) // model 6092, PCB label 510.1117A02, sound PCB 510.1117A01
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1080a01.ic5", 0x8000, 0x8000, CRC(846f8e40) SHA1(4e1d5b08d5ff3422192b54fa82cb3f505a69a971) ) // PCB1, M27256, same rom as fexcel
ROM_REGION( 0x8000, "speech", 0 )
ROM_LOAD("101-1081a01.ic2", 0x0000, 0x8000, CRC(c8ae1607) SHA1(6491ce6be60ed77f3dd931c0ca17616f13af943e) ) // PCB2, M27256
ROM_END
ROM_START( fexcel12 ) // model EP12, PCB label 510-1099A01
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1072a01.ic5", 0xc000, 0x4000, CRC(212b006d) SHA1(242ff851b0841cbec66bbada6a730da021010e2c) )
ROM_END
ROM_START( fexcel124 ) // model EP12, PCB label 510-1099A01
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1073a01.ic5", 0xc000, 0x4000, CRC(3e221534) SHA1(7516bc6a8aab9d8ac30ac1a9317630a6aa9ac1a0) )
ROM_END
ROM_START( fexcela ) // model 6080, PCB label 510-1099A01(manuf.1985) or 510-1099B01(manuf.1986)
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1072b01.ic5", 0xc000, 0x4000, CRC(fd2f6064) SHA1(f84bb98bdb9565a04891eb6820597d7aecc90c21) ) // RCA
ROM_END
ROM_START( fexcelp ) // model 6083, PCB label 510-1099A01
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1077a01.ic5", 0x8000, 0x8000, CRC(62006320) SHA1(1d6370973dbae42c54639b261cc81e32cdfc1d5d) )
ROM_END
ROM_START( fexcelpb ) // model 6083, PCB label 510-1099B01
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("par_ex.ic5", 0x8000, 0x8000, CRC(0d17b0f0) SHA1(3a6070fd4718c62b62ff0f08637bb6eb84eb9a1c) ) // GI 27C256, no label, only 1 byte difference, assume bugfix in bookrom
ROM_END
ROM_START( granits ) // modified SC12 board, overclocked Par Excellence program
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("granit_s-4", 0x8000, 0x8000, CRC(274d6aff) SHA1(c8d943b2f15422ac62f539b568f5509cbce568a3) )
ROM_END
ROM_START( fdes2000 ) // model 6102, PCB label 510.1129A01
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1077a01.ic5", 0x8000, 0x8000, CRC(62006320) SHA1(1d6370973dbae42c54639b261cc81e32cdfc1d5d) ) // AMI, same label as fexcelp
ROM_END
ROM_START( fdes2100 ) // model 6103, PCB label 510.1129A01
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1077a01.ic5", 0x8000, 0x8000, CRC(62006320) SHA1(1d6370973dbae42c54639b261cc81e32cdfc1d5d) ) // same as fdes2000
ROM_END
} // anonymous namespace
/******************************************************************************
Drivers
******************************************************************************/
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
CONS( 1987, fexcel, 0, 0, fexcelb, fexcelb, excel_state, empty_init, "Fidelity Electronics", "The Excellence (model 6080B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1987, fexcelv, fexcel, 0, fexcelv, fexcelv, excel_state, empty_init, "Fidelity Electronics", "Voice Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1987, fexceld, fexcel, 0, fexceld, fexcelb, excel_state, empty_init, "Fidelity Electronics", "Excel Display", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1985, fexcel12, fexcel, 0, fexcel, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Excellence (model EP12, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) // 1st version of The Excellence
CONS( 1985, fexcel124, fexcel, 0, fexcel4, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Excellence (model EP12, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1985, fexcela, fexcel, 0, fexcel, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Excellence (model 6080)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1986, fexcelp, 0, 0, fexcelp, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Par Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1986, fexcelpb, fexcelp, 0, fexcelp, fexcel, excel_state, empty_init, "Fidelity Electronics", "The Par Excellence (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1986, granits, fexcelp, 0, granits, fexcel, excel_state, empty_init, "hack (RCS)", "Granit 'S'", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1988, fdes2000, fexcelp, 0, fdes2000, fdes, excel_state, empty_init, "Fidelity Electronics", "Designer 2000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1988, fdes2100, fexcelp, 0, fdes2100, fdes, excel_state, empty_init, "Fidelity Electronics", "Designer 2100", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )

View File

@ -12870,6 +12870,19 @@ fex68kb //
fex68km2 //
fex68km3 //
@source:fidel_excel.cpp
fdes2000 //
fdes2100 //
fexcel //
fexcel12 //
fexcel124 //
fexcela //
fexceld //
fexcelp //
fexcelpb //
fexcelv //
granits // RCS
@source:fidel_sc6.cpp
fscc6 //
@ -12881,8 +12894,6 @@ csc // CSC: Champion Sensory Chess Challenger (Engli
cscfr // * French
cscg // * German
cscsp // * Spanish
fdes2000 //
fdes2100 //
feasbu // EAS: Elite A/S Challenger (Budapest program, English)
feasbufr // * French
feasbug // * German
@ -12896,14 +12907,6 @@ feag2100fr // * French
feag2100g // * German
feag2100sp // * Spanish
feleg //
fexcel //
fexcel12 //
fexcel124 //
fexcela //
fexceld //
fexcelp //
fexcelpb //
fexcelv //
fphantom //
fpres //
fpressp //
@ -12919,7 +12922,6 @@ fscc9c //
fscc9ps //
fscc12 //
fscc12b //
granits // RCS
reversic //
super9cc // SU9: Super 9 Sensory Chess Challenger (English)
super9ccfr // * French

View File

@ -243,6 +243,7 @@ fccpu20.cpp
fccpu30.cpp
fidel_desdis.cpp
fidel_eag68k.cpp
fidel_excel.cpp
fidel_sc6.cpp
fidel6502.cpp
fidelbase.cpp