diff options
Diffstat (limited to 'src/mame/drivers/fidel_elite.cpp')
-rw-r--r-- | src/mame/drivers/fidel_elite.cpp | 225 |
1 files changed, 87 insertions, 138 deletions
diff --git a/src/mame/drivers/fidel_elite.cpp b/src/mame/drivers/fidel_elite.cpp index 33dc3a925d1..ddd065bae59 100644 --- a/src/mame/drivers/fidel_elite.cpp +++ b/src/mame/drivers/fidel_elite.cpp @@ -13,8 +13,8 @@ Elite A/S Challenger (EAS) This came out in 1982. 2 program updates were released in 1983 and 1984, named Budapest and Glasgow, places where Fidelity won chess computer matches. A/S stands for auto sensory, it's the 1st Fidelity board with magnet sensors. -The magnetic chessboard was licensed from AVE Micro Systems, in fact it's the -exact same one as in AVE's ARB (ave_arb.cpp driver). +The magnetic chessboard was licensed from AVE Micro Systems, in fact, the +PC model board is the same one as in AVE's ARB (ave_arb.cpp driver). hardware overview: - 8*8 magnet sensors, 11 buttons, 8*(8+1) LEDs + 4*7seg LEDs @@ -52,6 +52,7 @@ It was probably only released in Germany. #include "cpu/m6502/m65c02.h" #include "cpu/m6502/r65c02.h" #include "machine/i8255.h" +#include "machine/sensorboard.h" #include "machine/nvram.h" #include "machine/timer.h" #include "sound/s14001a.h" @@ -75,6 +76,8 @@ namespace { // note: sub-class of fidel_clockdiv_state (see mame/machine/fidel_clockdiv.*) +// EAS / shared + class elite_state : public fidel_clockdiv_state { public: @@ -83,44 +86,40 @@ public: m_irq_on(*this, "irq_on"), m_ppi8255(*this, "ppi8255"), m_rombank(*this, "rombank"), + m_board(*this, "board"), m_display(*this, "display"), m_dac(*this, "dac"), m_speech(*this, "speech"), m_speech_rom(*this, "speech"), m_language(*this, "language"), m_cart(*this, "cartslot"), - m_inputs(*this, "IN.%u", 0) + m_inputs(*this, "IN.%u", 0), + m_rotate(false) { } // machine drivers void pc(machine_config &config); void eas(machine_config &config); void eas_priv(machine_config &config); - void eag(machine_config &config); - void eag2100(machine_config &config); - - void init_eag2100(); protected: virtual void machine_start() override; -private: // devices/pointers required_device<timer_device> m_irq_on; optional_device<i8255_device> m_ppi8255; optional_memory_bank m_rombank; + required_device<sensorboard_device> m_board; required_device<pwm_display_device> m_display; required_device<dac_bit_interface> m_dac; required_device<s14001a_device> m_speech; required_region_ptr<u8> m_speech_rom; required_region_ptr<u8> m_language; required_device<generic_slot_device> m_cart; - required_ioport_array<10> m_inputs; + required_ioport_array<2> m_inputs; // address maps void eas_map(address_map &map); - void eag_map(address_map &map); - void eag2100_map(address_map &map); void pc_map(address_map &map); // periodic interrupts @@ -139,17 +138,13 @@ private: DECLARE_READ8_MEMBER(ppi_portb_r); DECLARE_WRITE8_MEMBER(ppi_portc_w); + bool m_rotate; u8 m_led_data; u8 m_7seg_data; u8 m_inp_mux; u8 m_speech_bank; }; -void elite_state::init_eag2100() -{ - m_rombank->configure_entries(0, 4, memregion("rombank")->base(), 0x2000); -} - void elite_state::machine_start() { fidel_clockdiv_state::machine_start(); @@ -167,6 +162,34 @@ void elite_state::machine_start() save_item(NAME(m_speech_bank)); } +// EAG + +class eag_state : public elite_state +{ +public: + eag_state(const machine_config &mconfig, device_type type, const char *tag) : + elite_state(mconfig, type, tag) + { + m_rotate = true; + } + + // machine drivers + void eag(machine_config &config); + void eag2100(machine_config &config); + + void init_eag2100(); + +private: + // address maps + void eag_map(address_map &map); + void eag2100_map(address_map &map); +}; + +void eag_state::init_eag2100() +{ + m_rombank->configure_entries(0, 4, memregion("rombank")->base(), 0x2000); +} + /****************************************************************************** @@ -221,11 +244,17 @@ READ8_MEMBER(elite_state::input_r) // multiplexed inputs (active low) // read chessboard sensors if (m_inp_mux < 8) - data = m_inputs[m_inp_mux]->read(); + { + // EAG chessboard is rotated 90 degrees compared to EAS + if (m_rotate) + data = m_board->read_rank(m_inp_mux); + else + data = m_board->read_file(m_inp_mux, true); + } // read button panel else if (m_inp_mux == 8) - data = m_inputs[8]->read(); + data = m_inputs[0]->read(); return ~data; } @@ -277,7 +306,7 @@ READ8_MEMBER(elite_state::ppi_portb_r) data |= *m_language << 2 & 0x0c; // d5: 3 more buttons - data |= (BIT(m_inputs[9]->read(), m_inp_mux)) ? 0 : 0x20; + data |= (BIT(m_inputs[1]->read(), m_inp_mux)) ? 0 : 0x20; // other: ? return data | 0xd0; @@ -289,6 +318,21 @@ READ8_MEMBER(elite_state::ppi_portb_r) Address Maps ******************************************************************************/ +void elite_state::pc_map(address_map &map) +{ + map.unmap_value_high(); + map(0x0000, 0x17ff).ram(); + map(0x2000, 0x5fff).r("cartslot", FUNC(generic_slot_device::read_rom)); + map(0x7000, 0x7000).w(FUNC(elite_state::ppi_porta_w)); + map(0x7010, 0x7010).r(FUNC(elite_state::ppi_portb_r)); + map(0x7020, 0x7027).w(FUNC(elite_state::segment_w)).nopr(); + map(0x7030, 0x7037).w(FUNC(elite_state::led_w)).nopr(); + map(0x7040, 0x7040).w(FUNC(elite_state::ppi_portc_w)); + map(0x7050, 0x7050).r(FUNC(elite_state::input_r)); + map(0x8000, 0x9fff).ram(); + map(0xb000, 0xffff).rom(); +} + void elite_state::eas_map(address_map &map) { map.unmap_value_high(); @@ -302,133 +346,35 @@ void elite_state::eas_map(address_map &map) map(0xc000, 0xffff).rom(); } -void elite_state::eag_map(address_map &map) +void eag_state::eag_map(address_map &map) { map.unmap_value_high(); map(0x0000, 0x1fff).ram().share("nvram.ic8"); map(0x2000, 0x5fff).r("cartslot", FUNC(generic_slot_device::read_rom)); map(0x7000, 0x7003).rw(m_ppi8255, FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0x7020, 0x7027).w(FUNC(elite_state::segment_w)).nopr(); - map(0x7030, 0x7037).w(FUNC(elite_state::led_w)).nopr(); - map(0x7050, 0x7050).r(FUNC(elite_state::input_r)); + map(0x7020, 0x7027).w(FUNC(eag_state::segment_w)).nopr(); + map(0x7030, 0x7037).w(FUNC(eag_state::led_w)).nopr(); + map(0x7050, 0x7050).r(FUNC(eag_state::input_r)); map(0x8000, 0x9fff).ram().share("nvram.ic6"); map(0xa000, 0xffff).rom(); } -void elite_state::eag2100_map(address_map &map) +void eag_state::eag2100_map(address_map &map) { eag_map(map); map(0xa000, 0xbfff).bankr("rombank"); } -void elite_state::pc_map(address_map &map) -{ - map.unmap_value_high(); - map(0x0000, 0x17ff).ram(); - map(0x2000, 0x5fff).r("cartslot", FUNC(generic_slot_device::read_rom)); - map(0x7000, 0x7000).w(FUNC(elite_state::ppi_porta_w)); - map(0x7010, 0x7010).r(FUNC(elite_state::ppi_portb_r)); - map(0x7020, 0x7027).w(FUNC(elite_state::segment_w)).nopr(); - map(0x7030, 0x7037).w(FUNC(elite_state::led_w)).nopr(); - map(0x7040, 0x7040).w(FUNC(elite_state::ppi_portc_w)); - map(0x7050, 0x7050).r(FUNC(elite_state::input_r)); - map(0x8000, 0x9fff).ram(); - map(0xb000, 0xffff).rom(); -} - /****************************************************************************** Input Ports ******************************************************************************/ -INPUT_PORTS_START( generic_cb_magnets ) - PORT_START("IN.0") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - - PORT_START("IN.1") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - - PORT_START("IN.2") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - - PORT_START("IN.3") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - - PORT_START("IN.4") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - - PORT_START("IN.5") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - - PORT_START("IN.6") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - - PORT_START("IN.7") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") -INPUT_PORTS_END - static INPUT_PORTS_START( eas ) PORT_INCLUDE( fidel_clockdiv_4 ) - PORT_INCLUDE( generic_cb_magnets ) - PORT_START("IN.8") + PORT_START("IN.0") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("Game Control") // labeled RESET on the Prestige, but led display still says - G C - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_SPACE) PORT_NAME("Speaker") PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("PB / King") @@ -438,7 +384,7 @@ static INPUT_PORTS_START( eas ) PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("TB / Knight") PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("LV / Pawn") - PORT_START("IN.9") + PORT_START("IN.1") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("DM") PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL") PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("RV") @@ -446,9 +392,8 @@ INPUT_PORTS_END static INPUT_PORTS_START( eag ) PORT_INCLUDE( fidel_clockdiv_4 ) - PORT_INCLUDE( generic_cb_magnets ) - PORT_START("IN.8") + PORT_START("IN.0") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("RV") PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Option") PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("LV / Pawn") @@ -458,7 +403,7 @@ static INPUT_PORTS_START( eag ) PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("PV / Queen") PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("PB / King") - PORT_START("IN.9") + PORT_START("IN.1") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL") PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("DM") PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_N) PORT_NAME("New Game") @@ -482,6 +427,10 @@ void elite_state::pc(machine_config &config) m_irq_on->set_start_delay(irq_period - attotime::from_hz(38.4_kHz_XTAL*2)); // edge! TIMER(config, "irq_off").configure_periodic(FUNC(elite_state::irq_off<M6502_IRQ_LINE>), irq_period); + SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS); + m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); + m_board->set_delay(attotime::from_msec(100)); + /* video hardware */ PWM_DISPLAY(config, m_display).set_size(9, 16); m_display->set_segmask(0xf, 0x7f); @@ -534,13 +483,13 @@ void elite_state::eas_priv(machine_config &config) config.set_default_layout(layout_fidel_eas_priv); } -void elite_state::eag(machine_config &config) +void eag_state::eag(machine_config &config) { eas(config); /* basic machine hardware */ m_maincpu->set_clock(5_MHz_XTAL); // R65C02P4 - m_mainmap->set_addrmap(AS_PROGRAM, &elite_state::eag_map); + m_mainmap->set_addrmap(AS_PROGRAM, &eag_state::eag_map); config.device_remove("nvram"); NVRAM(config, "nvram.ic8", nvram_device::DEFAULT_ALL_0); @@ -551,12 +500,12 @@ void elite_state::eag(machine_config &config) config.set_default_layout(layout_fidel_eag); } -void elite_state::eag2100(machine_config &config) +void eag_state::eag2100(machine_config &config) { eag(config); /* basic machine hardware */ - m_mainmap->set_addrmap(AS_PROGRAM, &elite_state::eag2100_map); + m_mainmap->set_addrmap(AS_PROGRAM, &eag_state::eag2100_map); } @@ -792,12 +741,12 @@ ROM_END ******************************************************************************/ // YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS -CONS( 1983, feasbu, 0, 0, eas, eas, elite_state, empty_init, "Fidelity Electronics", "Elite A/S Challenger (Budapest program)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) -CONS( 1984, feasgla, feasbu, 0, eas, eas, elite_state, empty_init, "Fidelity Electronics", "Elite A/S Challenger (Glasgow program)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) -CONS( 1984, fepriv, feasbu, 0, eas_priv, eas, elite_state, empty_init, "Fidelity Deutschland", "Elite Private Line (red version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) +CONS( 1983, feasbu, 0, 0, eas, eas, elite_state, empty_init, "Fidelity Electronics", "Elite A/S Challenger (Budapest program)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING ) +CONS( 1984, feasgla, feasbu, 0, eas, eas, elite_state, empty_init, "Fidelity Electronics", "Elite A/S Challenger (Glasgow program)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING ) +CONS( 1984, fepriv, feasbu, 0, eas_priv, eas, elite_state, empty_init, "Fidelity Deutschland", "Elite Private Line (red version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING ) -CONS( 1982, fpres, 0, 0, pc, eas, elite_state, empty_init, "Fidelity Electronics", "Prestige Challenger (original program)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) -CONS( 1983, fpresbu, fpres, 0, pc, eas, elite_state, empty_init, "Fidelity Electronics", "Prestige Challenger (Budapest program)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) +CONS( 1982, fpres, 0, 0, pc, eas, elite_state, empty_init, "Fidelity Electronics", "Prestige Challenger (original program)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING ) +CONS( 1983, fpresbu, fpres, 0, pc, eas, elite_state, empty_init, "Fidelity Electronics", "Prestige Challenger (Budapest program)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING ) -CONS( 1986, feag, 0, 0, eag, eag, elite_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6081)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) -CONS( 1986, feag2100, feag, 0, eag2100, eag, elite_state, init_eag2100, "Fidelity Electronics", "Elite Avant Garde 2100", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) +CONS( 1986, feag, 0, 0, eag, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6081)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING ) +CONS( 1986, feag2100, feag, 0, eag2100, eag, eag_state, init_eag2100, "Fidelity Electronics", "Elite Avant Garde 2100", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING ) |