summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/fidelity/eag68k.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/fidelity/eag68k.cpp')
-rw-r--r--src/mame/fidelity/eag68k.cpp458
1 files changed, 305 insertions, 153 deletions
diff --git a/src/mame/fidelity/eag68k.cpp b/src/mame/fidelity/eag68k.cpp
index 4a52af85d62..c1b2b8b7b90 100644
--- a/src/mame/fidelity/eag68k.cpp
+++ b/src/mame/fidelity/eag68k.cpp
@@ -1,7 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:hap
// thanks-to:Berger, yoyo_chessboard
-/******************************************************************************
+/*******************************************************************************
Fidelity 68000-based Elite Avant Garde driver
For 6502-based EAG, see elite.cpp
@@ -10,7 +10,6 @@ Excel 68000 I/O is very similar to EAG, so it's handled in this driver as well
TODO:
- unemulated waitstates with DTACK
-- EAG USART is not emulated
- V10 CPU emulation is too slow, MAME 68040 opcode timing is same as 68030 but in
reality it is much faster, same goes for V11 of course (see note below)
- V11 CPU should be M68EC060, not yet emulated. Now using M68EC040 in its place
@@ -19,13 +18,15 @@ TODO:
- Do the opening book modules work? It detects the rom, but then does nothing
with it. Maybe support is limited since the basic CB9/CB16 modules have no use
on newer chesscomputers with a large internal opening library.
+- does premiere only use half of the nvram? 0x600000-0x603fff seems unused
+- premiere unknown reads/writes to 0x500000 with the Vancouver program
Currently(May 2020) when compared to the real chesscomputers, to get closer to the
actual speed, overclock V10 and V11 to 230%. This can be done by starting MAME
with the -cheat option and going to the Slider Controls menu, hold Ctrl and press
Right to overclock maincpu.
-*******************************************************************************
+********************************************************************************
Excel 68000 (model 6094) overview:
- 16KB RAM(2*SRM2264C-10 @ U8/U9), 64KB ROM(2*AT27C256-15DC @ U6/U7)
@@ -40,13 +41,16 @@ Mach IV has 2*256KB DRAM, and a daughterboard(510.1123B01) for the 68020 + 32KB
I/O is via TTL, overall very similar to EAG.
+Holding NEW GAME does a quick self-test, on Mach III and Mach IV it will also
+display a ROM checksum.
+
fex68km4 continuously tests RAM at boot and displays "512", this is normal.
To start, hold New Game or Clear.
-*******************************************************************************
+********************************************************************************
-Elite Avant Garde (EAG, model 6114)
------------------------------------
+Elite Avant Garde 2265 (EAG, model 6114)
+----------------------------------------
There are 5 versions of model 6114(V1 to V5):
@@ -56,6 +60,10 @@ V3: 512KB DRAM
V4: 1MB DRAM
V5: 128KB+16KB DRAM, dual-CPU! (2*68K @ 16MHz)
+V2/V3/V4 have the same program, older versions can be run by decreasing the
+RAM size (-ramsize option). It's not verified if V1 has the same program, but
+it probably does.
+
V6-V11 are on model 6117. Older 1986 model 6081/6088/6089 uses a 6502 CPU.
Hardware info:
@@ -75,9 +83,12 @@ The module slot pinout is different from SCC series. The data on those appears
to be compatible with EAG though and will load fine with an adapter.
The USART allows for a serial connection between the chess computer and another
-device, for example a PC. Fidelity released a DOS tool called EAGLINK which
-featured PC printer support, complete I/O control, detailed information while
-the program is 'thinking', etc.
+device, for example the Fidelity Challenger Printer, or a PC. It expects a baud
+rate of 600.
+
+Fidelity released a DOS tool called EAGLINK which featured PC printer support,
+complete I/O control, detailed information while the program is 'thinking', etc.
+It can be enabled with POP3 H3.
Memory map: (of what is known)
-----------
@@ -92,27 +103,29 @@ Memory map: (of what is known)
700002-700003 R lo d7: 74251: keypad row 8
604000-607FFF: 16KB EEPROM
-*******************************************************************************
+********************************************************************************
-Elite Avant Garde (EAG, model 6117)
------------------------------------
+Elite Avant Garde 2325 (EAG, model 6117)
+----------------------------------------
There are 6 versions of model 6117(V6 to V11). From a programmer's point of view,
the hardware is very similar to model 6114.
V6: 68020, 512KB hashtable RAM
V7: 68020, 1MB h.RAM
-V8: 2*68020, 512KB+128KB h.RAM
+V8: 2*68020, 512KB+128KB h.RAM (unreleased?)
V9: 68030, 1MB h.RAM
V10: 68040, 1MB h.RAM
-V11: 68060, 2MB h.RAM, high speed
+V11: 68060, high speed, 2MB h.RAM (half unused?)
+
+V6 has the same program as V7, it can be run by decreasing the RAM size. V11
+supposedly has the same program as V10.
V7 Hardware info:
-----------------
-- MC68020RC25E CPU, 25MHz XTAL - this PCB was overclocked, original was 20MHz so let's use that
-- 4*AS7C164-20PC 8KB SRAM, 2*KM684000ALG-7L 512KB CMOS SRAM
-- 2*27C512? 64KB EPROM, 2*HM6264LP-15 8KB SRAM, 2*AT28C64B 8KB EEPROM, 2*GAL16V8C
-- same as 6114: M82C51A, NE555, SN74HC4060, module slot, chessboard, ..
+- 510.1139A01 daughterboard with MC68020RC20E or MC68020RC25E @ 20MHz,
+ and 32KB RAM (4*MCM6264P35)
+- rest is same as 6114
V7 Memory map:
--------------
@@ -134,8 +147,8 @@ The ROM dump came from the V11(see below). Built-in factory test proves
that this program is a V10. Hold TB button immediately after power-on and
press it for a sequence of tests:
1) all LEDs on
-2) F40C: V10 program version
-3) 38b9: V10 ROM checksum
+2) F40C: V10 ROM checksum 1
+3) 38b9: V10 ROM checksum 2
4) xxxx: external module ROM checksum (0000 if no module present)
5) xxxx: user settings (stored in EEPROM)
6) xxxx: "
@@ -147,7 +160,7 @@ V11 Hardware info:
- MC68EC060RC75 CPU, 36MHz XTAL(36MHz bus, 72MHz CPU), CPU cooler required
- 4*CXK5863AP-20 8KB SRAM, 4*K6X4008C1F-DF55 512KB CMOS SRAM
- 4*M27C256B 32KB EPROM, 2*AT28C64 8KB EEPROM, 5*GAL16V8D
-- NEC D71051C USART, assume 8MHz, on quick glance it's same as the OKI USART
+- NEC D71051C USART, on quick glance it's same as the OKI USART
- same as 6114: NE555, SN74HC4060, module slot, chessboard, ..
This is a custom overclocked V10, manufactured by Wilfried Bucke. PCB is marked:
@@ -158,21 +171,49 @@ Maybe other differences too?
V1x Memory map:
---------------
000000-01FFFF: 128KB ROM
-200000-3FFFFF: hashtable SRAM (less on V10?)
+280000-37FFFF: hashtable SRAM
B0000x-xxxxxx: see V7, -800000
-******************************************************************************/
+********************************************************************************
+
+Elite Premiere (model 6131)
+---------------------------
+
+This 2-in-1 chesscomputer was manufactured after Fidelity became a H+G subsidiary,
+it's still Fidelity branded. It has a switch where the module slot used to be,
+for selecting between Vancouver (Richard Lang) and 2265 (Spracklen's) programs.
+The 2265 ROM half is almost identical to EAG V2 (the elite_1.6 one), the handful
+of bytes difference is due to the changed hash RAM start address.
+
+The switch is not supposed to be flipped while power is on, hence MAME will only
+check it at reset (otherwise, the CPU will crash and may overwrite NVRAM). Each
+program has its own NVRAM bank, so unfortunately the user can't save the game on
+one program and then analyze or continue on the other.
+
+Hardware info:
+--------------
+- TMP68HC000P-16, 16MHz XTAL
+- 256KB ROM (2*M27C1001), 256KB RAM (2*TC551001PL-10)
+- 64KB battery-backed RAM (2*KM62256AP-10), Dallas DS1210
+- OKI M82C51A-2 USART, 4.9152MHz XTAL
+
+RAM can't be expanded, there are MB1422A and SIMM PCB markings, but unpopulated.
+The I/O remains the same as EAG V2.
+
+*******************************************************************************/
#include "emu.h"
#include "bus/generic/carts.h"
#include "bus/generic/slot.h"
+#include "bus/rs232/rs232.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/m68000/m68030.h"
#include "cpu/m68000/m68040.h"
#include "machine/clock.h"
#include "machine/gen_latch.h"
+#include "machine/i8251.h"
#include "machine/ram.h"
#include "machine/nvram.h"
#include "machine/sensorboard.h"
@@ -183,8 +224,8 @@ B0000x-xxxxxx: see V7, -800000
#include "speaker.h"
// internal artwork
-#include "fidel_ex_68k.lh" // clickable
-#include "fidel_eag_68k.lh" // clickable
+#include "fidel_ex_68k.lh"
+#include "fidel_eag_68k.lh"
namespace {
@@ -198,6 +239,7 @@ public:
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_ram(*this, "ram"),
+ m_usart(*this, "usart"),
m_board(*this, "board"),
m_display(*this, "display"),
m_dac(*this, "dac"),
@@ -205,8 +247,7 @@ public:
{ }
// machine configs
- void eagv2(machine_config &config);
- void eagv3(machine_config &config);
+ void eagv4(machine_config &config);
void eagv5(machine_config &config);
void eagv7(machine_config &config);
void eagv9(machine_config &config);
@@ -215,17 +256,26 @@ public:
void init_eag();
+ DECLARE_INPUT_CHANGED_MEMBER(in1_changed) { update_dsr(); }
+
protected:
virtual void machine_start() override;
+ virtual void machine_reset() override;
+
void eag_base(machine_config &config);
// devices/pointers
required_device<m68000_base_device> m_maincpu;
optional_device<ram_device> m_ram;
+ optional_device<i8251_device> m_usart;
required_device<sensorboard_device> m_board;
required_device<pwm_display_device> m_display;
- required_device<dac_bit_interface> m_dac;
- optional_ioport_array<2> m_inputs;
+ required_device<dac_1bit_device> m_dac;
+ optional_ioport_array<3> m_inputs;
+
+ u8 m_select = 0;
+ u8 m_7seg_data = 0;
+ u8 m_led_data = 0;
// address maps
void eag_map(address_map &map);
@@ -234,16 +284,12 @@ protected:
// I/O handlers
void update_display();
- virtual void mux_w(offs_t offset, u8 data);
- u8 input1_r(offs_t offset);
- u8 input2_r();
+ void update_dsr();
+ void mux_w(offs_t offset, u8 data);
+ u8 input_r(offs_t offset);
+ virtual u8 board_r() { return m_board->read_rank(m_select, true); }
void leds_w(offs_t offset, u8 data);
void digit_w(offs_t offset, u8 data);
-
- bool m_rotate = true;
- u8 m_select = 0;
- u8 m_7seg_data = 0;
- u8 m_led_data = 0;
};
void eag_state::machine_start()
@@ -254,6 +300,12 @@ void eag_state::machine_start()
save_item(NAME(m_led_data));
}
+void eag_state::machine_reset()
+{
+ update_dsr();
+}
+
+
// EAG V5
class eagv5_state : public eag_state
@@ -285,6 +337,56 @@ private:
u8 sub_ack_r();
};
+
+// Elite Premiere
+
+class premiere_state : public eag_state
+{
+public:
+ premiere_state(const machine_config &mconfig, device_type type, const char *tag) :
+ eag_state(mconfig, type, tag),
+ m_nvram(*this, "nvram", 0x10000, ENDIANNESS_BIG),
+ m_nvrambank(*this, "nvrambank"),
+ m_rombank(*this, "rombank")
+ { }
+
+ // machine configs
+ void premiere(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+private:
+ // devices/pointers
+ memory_share_creator<u16> m_nvram;
+ required_memory_bank m_nvrambank;
+ required_memory_bank m_rombank;
+
+ // address maps
+ void main_map(address_map &map);
+};
+
+void premiere_state::machine_start()
+{
+ eag_state::machine_start();
+
+ // init banks
+ m_rombank->configure_entries(0, 2, memregion("maincpu")->base(), 0x20000);
+ m_nvrambank->configure_entries(0, 2, m_nvram, 0x8000);
+}
+
+void premiere_state::machine_reset()
+{
+ eag_state::machine_reset();
+
+ // program switch directly selects bank
+ const u8 bank = m_inputs[2]->read() & 1;
+ m_rombank->set_entry(bank);
+ m_nvrambank->set_entry(bank);
+}
+
+
// Excel 68000
class excel68k_state : public eag_state
@@ -292,9 +394,7 @@ class excel68k_state : public eag_state
public:
excel68k_state(const machine_config &mconfig, device_type type, const char *tag) :
eag_state(mconfig, type, tag)
- {
- m_rotate = false;
- }
+ { }
// machine configs
void fex68k(machine_config &config);
@@ -308,13 +408,16 @@ private:
void fex68km2_map(address_map &map);
void fex68km3_map(address_map &map);
void fex68km4_map(address_map &map);
+
+ // I/O handlers
+ virtual u8 board_r() override { return m_board->read_file(m_select); }
};
-/******************************************************************************
+/*******************************************************************************
I/O
-******************************************************************************/
+*******************************************************************************/
// TTL/generic
@@ -326,6 +429,13 @@ void eag_state::update_display()
m_display->matrix(1 << m_select, m_led_data << 8 | seg_data);
}
+void eag_state::update_dsr()
+{
+ // USART DSR: 3 more buttons on EAG
+ if (m_usart != nullptr)
+ m_usart->write_dsr(!BIT(m_inputs[1]->read(), m_select));
+}
+
void eag_state::mux_w(offs_t offset, u8 data)
{
// a1-a3,d0: 74259
@@ -334,6 +444,7 @@ void eag_state::mux_w(offs_t offset, u8 data)
// 74259 Q0-Q3: 74145 A-D (Q4-Q7 N/C)
m_select &= 0xf;
+ update_dsr();
// 74145 0-8: input mux, digit/led select
// 74145 9: speaker out
@@ -341,20 +452,14 @@ void eag_state::mux_w(offs_t offset, u8 data)
update_display();
}
-u8 eag_state::input1_r(offs_t offset)
+u8 eag_state::input_r(offs_t offset)
{
u8 data = 0;
// a1-a3,d7: multiplexed inputs (active low)
// read chessboard sensors
if (m_select < 8)
- {
- // EAG chessboard is rotated 90 degrees
- if (m_rotate)
- data = m_board->read_rank(m_select, true);
- else
- data = m_board->read_file(m_select);
- }
+ data = board_r();
// read button panel
else if (m_select == 8)
@@ -363,12 +468,6 @@ u8 eag_state::input1_r(offs_t offset)
return (data >> offset & 1) ? 0 : 0x80;
}
-u8 eag_state::input2_r()
-{
- // d7: 3 more buttons on EAG
- return (BIT(m_inputs[1]->read(), m_select)) ? 0x80 : 0;
-}
-
void eag_state::leds_w(offs_t offset, u8 data)
{
// a1-a3,d0: led data
@@ -406,9 +505,9 @@ u8 eagv5_state::sub_ack_r()
-/******************************************************************************
+/*******************************************************************************
Address Maps
-******************************************************************************/
+*******************************************************************************/
// Excel 68000
@@ -418,7 +517,7 @@ void excel68k_state::fex68k_map(address_map &map)
map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(excel68k_state::leds_w)).umask16(0x00ff);
map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(excel68k_state::digit_w)).umask16(0xff00);
map(0x044000, 0x047fff).ram();
- map(0x100000, 0x10000f).mirror(0x03fff0).r(FUNC(excel68k_state::input1_r)).umask16(0x00ff);
+ map(0x100000, 0x10000f).mirror(0x03fff0).r(FUNC(excel68k_state::input_r)).umask16(0x00ff);
map(0x140000, 0x14000f).mirror(0x03fff0).w(FUNC(excel68k_state::mux_w)).umask16(0x00ff);
}
@@ -440,7 +539,7 @@ void excel68k_state::fex68km4_map(address_map &map)
map(0x00000000, 0x0000000f).mirror(0x00fff0).w(FUNC(excel68k_state::leds_w)).umask32(0x00ff00ff);
map(0x00000000, 0x0000000f).mirror(0x00fff0).w(FUNC(excel68k_state::digit_w)).umask32(0xff00ff00);
map(0x00044000, 0x00047fff).ram(); // unused?
- map(0x00100000, 0x0010000f).mirror(0x03fff0).r(FUNC(excel68k_state::input1_r)).umask32(0x00ff00ff);
+ map(0x00100000, 0x0010000f).mirror(0x03fff0).r(FUNC(excel68k_state::input_r)).umask32(0x00ff00ff);
map(0x00140000, 0x0014000f).mirror(0x03fff0).w(FUNC(excel68k_state::mux_w)).umask32(0x00ff00ff);
map(0x00200000, 0x0027ffff).ram();
map(0x00400000, 0x00407fff).ram();
@@ -451,7 +550,7 @@ void excel68k_state::fex68km4_map(address_map &map)
void eag_state::init_eag()
{
- // eag_map: DRAM slots at $200000-$2fffff - V1/V2/V5: 128K, V3: 512K, V4: 1M
+ // eag_map: DRAM slots at $200000-$2fffff - V1/V2/V5: 128K, V3/V6: 512K, V4/V7/V9: 1M
m_maincpu->space(AS_PROGRAM).install_ram(0x200000, 0x200000 + m_ram->size() - 1, m_ram->pointer());
}
@@ -460,11 +559,11 @@ void eag_state::eag_map(address_map &map)
map(0x000000, 0x01ffff).rom();
map(0x104000, 0x107fff).ram();
map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(eag_state::digit_w)).umask16(0xff00).nopr();
- map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask16(0x00ff);
+ map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(eag_state::input_r), FUNC(eag_state::leds_w)).umask16(0x00ff);
map(0x400000, 0x400007).w(FUNC(eag_state::mux_w)).umask16(0x00ff);
map(0x400000, 0x407fff).r("cartslot", FUNC(generic_slot_device::read_rom)).umask16(0xff00);
map(0x604000, 0x607fff).ram().share("nvram");
- map(0x700003, 0x700003).r(FUNC(eag_state::input2_r));
+ map(0x700000, 0x700003).rw(m_usart, FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
}
void eagv5_state::main_map(address_map &map)
@@ -487,34 +586,44 @@ void eag_state::eagv7_map(address_map &map)
{
map(0x000000, 0x01ffff).rom();
map(0x104000, 0x107fff).ram();
- map(0x200000, 0x2fffff).ram();
map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(eag_state::digit_w)).umask32(0xff00ff00).nopr();
- map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff);
+ map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(eag_state::input_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff);
map(0x400000, 0x400007).w(FUNC(eag_state::mux_w)).umask32(0x00ff00ff);
map(0x400000, 0x407fff).r("cartslot", FUNC(generic_slot_device::read_rom)).umask32(0xff00ff00);
map(0x604000, 0x607fff).ram().share("nvram");
- map(0x700003, 0x700003).r(FUNC(eag_state::input2_r));
+ map(0x700000, 0x700003).rw(m_usart, FUNC(i8251_device::read), FUNC(i8251_device::write)).umask32(0x00ff00ff);
map(0x800000, 0x807fff).ram();
}
void eag_state::eagv10_map(address_map &map)
{
map(0x00000000, 0x0001ffff).rom();
- map(0x00200000, 0x003fffff).ram();
+ map(0x00280000, 0x0037ffff).ram();
map(0x00b00000, 0x00b0000f).mirror(0x00000010).w(FUNC(eag_state::digit_w)).umask32(0xff00ff00).nopr();
- map(0x00b00000, 0x00b0000f).mirror(0x00000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff);
+ map(0x00b00000, 0x00b0000f).mirror(0x00000010).rw(FUNC(eag_state::input_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff);
map(0x00c00000, 0x00c00007).w(FUNC(eag_state::mux_w)).umask32(0x00ff00ff);
map(0x00c00000, 0x00c07fff).r("cartslot", FUNC(generic_slot_device::read_rom)).umask32(0xff00ff00);
map(0x00e04000, 0x00e07fff).ram().share("nvram");
- map(0x00f00003, 0x00f00003).r(FUNC(eag_state::input2_r));
- map(0x01000000, 0x0101ffff).ram();
+ map(0x00f00000, 0x00f00003).rw(m_usart, FUNC(i8251_device::read), FUNC(i8251_device::write)).umask32(0x00ff00ff);
+ map(0x01018000, 0x0101ffff).ram();
+}
+
+void premiere_state::main_map(address_map &map)
+{
+ map(0x000000, 0x01ffff).bankr(m_rombank);
+ map(0x100000, 0x13ffff).ram();
+ map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(premiere_state::digit_w)).umask16(0xff00).nopr();
+ map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(premiere_state::input_r), FUNC(premiere_state::leds_w)).umask16(0x00ff);
+ map(0x400000, 0x400007).w(FUNC(premiere_state::mux_w)).umask16(0x00ff);
+ map(0x600000, 0x607fff).mirror(0x008000).bankrw(m_nvrambank);
+ map(0x700000, 0x700003).rw(m_usart, FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
}
-/******************************************************************************
+/*******************************************************************************
Input Ports
-******************************************************************************/
+*******************************************************************************/
static INPUT_PORTS_START( excel68k )
PORT_START("IN.0")
@@ -540,20 +649,29 @@ static INPUT_PORTS_START( eag )
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("RV")
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")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL") PORT_CHANGED_MEMBER(DEVICE_SELF, eag_state, in1_changed, 0)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("DM") PORT_CHANGED_MEMBER(DEVICE_SELF, eag_state, in1_changed, 0)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_N) PORT_NAME("New Game") PORT_CHANGED_MEMBER(DEVICE_SELF, eag_state, in1_changed, 0)
INPUT_PORTS_END
+static INPUT_PORTS_START( premiere )
+ PORT_INCLUDE( eag )
+
+ PORT_START("IN.2")
+ PORT_CONFNAME( 0x01, 0x00, "Program" )
+ PORT_CONFSETTING( 0x00, "Vancouver" )
+ PORT_CONFSETTING( 0x01, "2265" )
+INPUT_PORTS_END
-/******************************************************************************
+
+/*******************************************************************************
Machine Configs
-******************************************************************************/
+*******************************************************************************/
void excel68k_state::fex68k(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
M68000(config, m_maincpu, 12_MHz_XTAL); // HD68HC000P12
m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68k_map);
@@ -565,12 +683,12 @@ void excel68k_state::fex68k(machine_config &config)
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(200));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(8, 16);
m_display->set_segmask(0x55, 0x7f);
config.set_default_layout(layout_fidel_ex_68k);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "speaker").front_center();
DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
}
@@ -579,7 +697,7 @@ void excel68k_state::fex68km2(machine_config &config)
{
fex68k(config);
- /* basic machine hardware */
+ // basic machine hardware
m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68km2_map);
}
@@ -587,7 +705,7 @@ void excel68k_state::fex68km3(machine_config &config)
{
fex68k(config);
- /* basic machine hardware */
+ // basic machine hardware
m_maincpu->set_clock(16_MHz_XTAL); // factory overclock
m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68km3_map);
}
@@ -596,7 +714,7 @@ void excel68k_state::fex68km4(machine_config &config)
{
fex68k(config);
- /* basic machine hardware */
+ // basic machine hardware
M68020(config.replace(), m_maincpu, 20_MHz_XTAL); // XC68020RC16 or MC68020RC20E
m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68km4_map);
@@ -605,9 +723,9 @@ void excel68k_state::fex68km4(machine_config &config)
void eag_state::eag_base(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
M68000(config, m_maincpu, 16_MHz_XTAL);
- m_maincpu->disable_interrupt_mixer();
+ m_maincpu->set_interrupt_mixer(false);
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eag_map);
auto &irq_clock(CLOCK(config, "irq_clock", 4.9152_MHz_XTAL / 0x2000)); // 4060 Q13, 600Hz
@@ -616,47 +734,49 @@ void eag_state::eag_base(machine_config &config)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
+ I8251(config, m_usart, 4.9152_MHz_XTAL);
+ m_usart->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+
+ auto &usart_clock(CLOCK(config, "usart_clock", 4.9152_MHz_XTAL / 128)); // 4060 Q7, 38.4kHz
+ usart_clock.signal_handler().set(m_usart, FUNC(i8251_device::write_txc));
+
+ auto &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr));
+ rs232.rxd_handler().set(m_usart, FUNC(i8251_device::write_rxd));
+ rs232.cts_handler().set(m_usart, FUNC(i8251_device::write_cts));
+
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(150));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 16);
m_display->set_segmask(0x1ef, 0x7f);
config.set_default_layout(layout_fidel_eag_68k);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "speaker").front_center();
DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
- /* cartridge */
+ // cartridge
GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "fidel_scc");
SOFTWARE_LIST(config, "cart_list").set_original("fidel_scc");
}
-void eag_state::eagv2(machine_config &config)
+void eag_state::eagv4(machine_config &config)
{
eag_base(config);
- /* basic machine hardware */
+ // basic machine hardware
RAM(config, m_ram).set_extra_options("128K, 512K, 1M");
- m_ram->set_default_size("128K");
+ m_ram->set_default_size("1M");
m_ram->set_default_value(0);
}
-void eag_state::eagv3(machine_config &config)
-{
- eagv2(config);
-
- /* basic machine hardware */
- m_ram->set_default_size("512K");
-}
-
void eagv5_state::eagv5(machine_config &config)
{
- eagv2(config);
+ eagv4(config);
- /* basic machine hardware */
+ // basic machine hardware
m_maincpu->set_addrmap(AS_PROGRAM, &eagv5_state::main_map);
M68000(config, m_subcpu, 16_MHz_XTAL);
@@ -669,56 +789,73 @@ void eagv5_state::eagv5(machine_config &config)
// gen_latch syncs on write, but this is still needed with tight cpu comms
// (not that it locks up or anything, but it will calculate moves much slower if timing is off)
- config.set_perfect_quantum(m_maincpu);
+ config.set_maximum_quantum(attotime::from_hz(m_maincpu->clock() / 4));
+
+ m_ram->set_default_size("128K");
}
void eag_state::eagv7(machine_config &config)
{
- eag_base(config);
+ eagv4(config);
- /* basic machine hardware */
- M68020(config.replace(), m_maincpu, 20_MHz_XTAL); // also seen with 25MHz XTAL
- m_maincpu->disable_interrupt_mixer();
+ // basic machine hardware
+ M68020(config.replace(), m_maincpu, 20_MHz_XTAL); // MC68020RC20E
+ m_maincpu->set_interrupt_mixer(false);
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv7_map);
+
+ m_ram->set_extra_options("512K, 1M");
}
void eag_state::eagv9(machine_config &config)
{
eagv7(config);
- /* basic machine hardware */
+ // basic machine hardware
M68030(config.replace(), m_maincpu, 32_MHz_XTAL); // also seen with 40MHz XTAL
- m_maincpu->disable_interrupt_mixer();
+ m_maincpu->set_interrupt_mixer(false);
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv7_map);
}
void eag_state::eagv10(machine_config &config)
{
- eagv7(config);
+ eag_base(config);
- /* basic machine hardware */
+ // basic machine hardware
M68040(config.replace(), m_maincpu, 25_MHz_XTAL);
- m_maincpu->disable_interrupt_mixer();
+ m_maincpu->set_interrupt_mixer(false);
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv10_map);
+
+ // IRQ pulse should be shorter, guessed here
+ subdevice<clock_device>("irq_clock")->set_pulse_width(attotime::from_nsec(1000));
}
void eag_state::eagv11(machine_config &config)
{
- eagv7(config);
+ eagv10(config);
- /* basic machine hardware */
+ // basic machine hardware
M68EC040(config.replace(), m_maincpu, 36_MHz_XTAL*2); // wrong! should be M68EC060
+ m_maincpu->set_interrupt_mixer(false);
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv10_map);
+}
+
+void premiere_state::premiere(machine_config &config)
+{
+ eag_base(config);
+
+ // basic machine hardware
+ m_maincpu->set_addrmap(AS_PROGRAM, &premiere_state::main_map);
- config.device_remove("irq_clock"); // 8.25us is too long
- m_maincpu->set_periodic_int(FUNC(eag_state::irq2_line_hold), attotime::from_hz(600));
+ // no cartridge
+ config.device_remove("cartslot");
+ config.device_remove("cart_list");
}
-/******************************************************************************
+/*******************************************************************************
ROM Definitions
-******************************************************************************/
+*******************************************************************************/
ROM_START( fex68k ) // model 6094, PCB label 510.1120B01
ROM_REGION16_BE( 0x10000, "maincpu", 0 )
@@ -775,20 +912,20 @@ ROM_START( fex68km4 ) // model 6110, PCB label 510.1120B01 - checksum FD96
ROM_END
-ROM_START( feagv2 )
+ROM_START( feagv4 ) // dumped from a V3 - checksum F66D 4B3E
ROM_REGION16_BE( 0x20000, "maincpu", 0 )
- ROM_LOAD16_BYTE("6114_e5_yellow.u22", 0x00000, 0x10000, CRC(f9c7bada) SHA1(60e545f829121b9a4f1100d9e85ac83797715e80) ) // 27c512
- ROM_LOAD16_BYTE("6114_o5_green.u19", 0x00001, 0x10000, CRC(04f97b22) SHA1(8b2845dd115498f7b385e8948eca6a5893c223d1) ) // "
+ ROM_LOAD16_BYTE("elite_1.6_e.u22", 0x00000, 0x10000, CRC(c8b89ccc) SHA1(d62e0a72f54b793ab8853468a81255b62f874658) )
+ ROM_LOAD16_BYTE("elite_1.6_o.u19", 0x00001, 0x10000, CRC(904c7061) SHA1(742110576cf673321440bc81a4dae4c949b49e38) )
ROM_END
-ROM_START( feagv3 )
+ROM_START( feagv4a ) // dumped from a V2 - checksum FD5C 49AC
ROM_REGION16_BE( 0x20000, "maincpu", 0 )
- ROM_LOAD16_BYTE("elite_1.6_e.u22", 0x00000, 0x10000, CRC(c8b89ccc) SHA1(d62e0a72f54b793ab8853468a81255b62f874658) )
- ROM_LOAD16_BYTE("elite_1.6_o.u19", 0x00001, 0x10000, CRC(904c7061) SHA1(742110576cf673321440bc81a4dae4c949b49e38) )
+ ROM_LOAD16_BYTE("6114_e5_yellow.u22", 0x00000, 0x10000, CRC(f9c7bada) SHA1(60e545f829121b9a4f1100d9e85ac83797715e80) ) // 27c512
+ ROM_LOAD16_BYTE("6114_o5_green.u19", 0x00001, 0x10000, CRC(04f97b22) SHA1(8b2845dd115498f7b385e8948eca6a5893c223d1) ) // "
ROM_END
ROM_START( feagv5 )
- ROM_REGION16_BE( 0x20000, "maincpu", 0 ) // PCB label 510.1136A01
+ ROM_REGION16_BE( 0x20000, "maincpu", 0 ) // PCB label 510.1136A01 - checksum 0140 9CF2
ROM_LOAD16_BYTE("master_e", 0x00000, 0x10000, CRC(e424bddc) SHA1(ff03656addfe5c47f06df2efb4602f43a9e19d96) )
ROM_LOAD16_BYTE("master_o", 0x00001, 0x10000, CRC(33a00894) SHA1(849460332b1ac10d452ca3631eb99f5597511b73) )
@@ -797,25 +934,31 @@ ROM_START( feagv5 )
ROM_LOAD16_BYTE("slave_o", 0x00001, 0x08000, CRC(35fe2fdf) SHA1(731da12ee290bad9bc03cffe281c8cc48e555dfb) )
ROM_END
-ROM_START( feagv7 )
+ROM_START( feagv7 ) // dumped from a repro pcb - checksum FCA0 6969
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE("eag-v7b", 0x00000, 0x10000, CRC(f2f68b63) SHA1(621e5073e9c5083ac9a9b467f3ef8aa29beac5ac) )
ROM_LOAD16_BYTE("eag-v7a", 0x00001, 0x10000, CRC(506b688f) SHA1(0a091c35d0f01166b57f964b111cde51c5720d58) )
ROM_END
-ROM_START( feagv7a )
+ROM_START( feagv7a ) // PCB label 510.1136A01, dumped from a V6 - checksum 005D 6AB7
+ ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_LOAD16_BYTE("e1_yellow.u22", 0x00000, 0x10000, CRC(2fa692a9) SHA1(357fd47e97f823462e372c7b4d0730c1fa35c364) )
+ ROM_LOAD16_BYTE("o1_red.u19", 0x00001, 0x10000, CRC(bceb99f0) SHA1(601869be5fb9724fe75f14d4dac58471eed6e0f4) )
+ROM_END
+
+ROM_START( feagv7b ) // checksum 00D5 6939
ROM_REGION( 0x20000, "maincpu", 0 )
- ROM_LOAD16_BYTE("eag-v7b", 0x00000, 0x10000, CRC(44baefbf) SHA1(dbc24340d7e3013cc8f111ebb2a59169c5dcb8e8) )
- ROM_LOAD16_BYTE("eag-v7a", 0x00001, 0x10000, CRC(951a7857) SHA1(dad21b049fd4f411a79d4faefb922c1277569c0e) )
+ ROM_LOAD16_BYTE("e1_yellow.u22", 0x00000, 0x10000, CRC(44baefbf) SHA1(dbc24340d7e3013cc8f111ebb2a59169c5dcb8e8) )
+ ROM_LOAD16_BYTE("o1_red.u19", 0x00001, 0x10000, CRC(951a7857) SHA1(dad21b049fd4f411a79d4faefb922c1277569c0e) )
ROM_END
-ROM_START( feagv9 )
+ROM_START( feagv9 ) // checksum F702 6893
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE("eag-v9b", 0x00000, 0x10000, CRC(60523199) SHA1(a308eb6b782732af1ab2fd0ed8b046de7a8dd24b) )
ROM_LOAD16_BYTE("eag-v9a", 0x00001, 0x10000, CRC(255c63c0) SHA1(8aa0397bdb3731002f5b066cd04ec62531267e22) )
ROM_END
-ROM_START( feagv10 )
+ROM_START( feagv10 ) // checksum F40C 38B9
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD32_BYTE("16", 0x00000, 0x08000, CRC(8375d61f) SHA1(e042f6f01480c59ee09a458cf34f135664479824) ) // 27c256
ROM_LOAD32_BYTE("17", 0x00001, 0x08000, CRC(bfd14916) SHA1(115af6dfd29ddd8ad6d2ce390f8ecc4d60de6fce) ) // "
@@ -823,7 +966,7 @@ ROM_START( feagv10 )
ROM_LOAD32_BYTE("19", 0x00003, 0x08000, CRC(a70c5468) SHA1(7f6b4f46577d5cfdaa84d387c7ce35d941e5bbc7) ) // "
ROM_END
-ROM_START( feagv11 )
+ROM_START( feagv11 ) // checksum F40C 38B9
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD32_BYTE("16", 0x00000, 0x08000, CRC(8375d61f) SHA1(e042f6f01480c59ee09a458cf34f135664479824) ) // 27c256
ROM_LOAD32_BYTE("17", 0x00001, 0x08000, CRC(bfd14916) SHA1(115af6dfd29ddd8ad6d2ce390f8ecc4d60de6fce) ) // "
@@ -831,30 +974,39 @@ ROM_START( feagv11 )
ROM_LOAD32_BYTE("19", 0x00003, 0x08000, CRC(a70c5468) SHA1(7f6b4f46577d5cfdaa84d387c7ce35d941e5bbc7) ) // "
ROM_END
+ROM_START( premiere ) // model 6131, PCB label 510.1157A01 - checksum (2265 only) F667 4B06
+ ROM_REGION16_BE( 0x40000, "maincpu", 0 )
+ ROM_LOAD16_BYTE("101.1103a01_1meg_even.u22", 0x00000, 0x20000, CRC(0df2d4d8) SHA1(2c6cd8d83768d14aeb9860be76ed2ec0f64f118b) ) // M27C1001
+ ROM_LOAD16_BYTE("101.1104a01_1meg_odd.u19", 0x00001, 0x20000, CRC(afae9d5e) SHA1(7ab5fb8b8a2fa30f2fd444a050eae2432c9236d0) ) // "
+ROM_END
+
} // anonymous namespace
-/******************************************************************************
+/*******************************************************************************
Drivers
-******************************************************************************/
-
-// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
-CONS( 1987, fex68k, 0, 0, fex68k, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1987, fex68ka, fex68k, 0, fex68k, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1987, fex68kb, fex68k, 0, fex68k, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1988, fex68km2, fex68k, 0, fex68km2, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach II (rev. C+, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1988, fex68km2a, fex68k, 0, fex68km2, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach II (rev. C+, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1988, fex68km3, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1988, fex68km3a, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1988, fex68km3b, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1989, fex68km4, fex68k, 0, fex68km4, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach IV 68020 Master 2325", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-
-CONS( 1989, feagv2, 0, 0, eagv2, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1989, feagv3, feagv2, 0, eagv3, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1989, feagv5, feagv2, 0, eagv5, eag, eagv5_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1990, feagv7, feagv2, 0, eagv7, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-7, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1990, feagv7a, feagv2, 0, eagv7, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-7, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1990, feagv9, feagv2, 0, eagv9, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-9)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1990, feagv10, feagv2, 0, eagv10, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING )
-CONS( 2002, feagv11, feagv2, 0, eagv11, eag, eag_state, empty_init, "hack (Wilfried Bucke)", "Elite Avant Garde (model 6117-11)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING )
+*******************************************************************************/
+
+// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
+SYST( 1987, fex68k, 0, 0, fex68k, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+SYST( 1987, fex68ka, fex68k, 0, fex68k, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+SYST( 1987, fex68kb, fex68k, 0, fex68k, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+SYST( 1988, fex68km2, fex68k, 0, fex68km2, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach II (rev. C+, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+SYST( 1988, fex68km2a, fex68k, 0, fex68km2, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach II (rev. C+, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+SYST( 1988, fex68km3, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master 2265 (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+SYST( 1988, fex68km3a, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master 2265 (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+SYST( 1988, fex68km3b, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master 2265 (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+SYST( 1989, fex68km4, fex68k, 0, fex68km4, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach IV 68020 Master 2325", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+
+SYST( 1989, feagv4, 0, 0, eagv4, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde 2265 (model 6114-2/3/4, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+SYST( 1989, feagv4a, feagv4, 0, eagv4, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde 2265 (model 6114-2/3/4, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+SYST( 1989, feagv5, feagv4, 0, eagv5, eag, eagv5_state, init_eag, "Fidelity Electronics", "Elite Avant Garde 2265 (model 6114-5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+SYST( 1989, feagv7, feagv4, 0, eagv7, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde 2325 (model 6117-6/7, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+SYST( 1989, feagv7a, feagv4, 0, eagv7, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde 2325 (model 6117-6/7, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+SYST( 1989, feagv7b, feagv4, 0, eagv7, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde 2325 (model 6117-6/7, set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+SYST( 1990, feagv9, feagv4, 0, eagv9, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde 2325 (model 6117-9)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+SYST( 1990, feagv10, feagv4, 0, eagv10, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde 2325 (model 6117-10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING )
+SYST( 2001, feagv11, feagv4, 0, eagv11, eag, eag_state, empty_init, "hack (Wilfried Bucke)", "Elite Avant Garde 2325 (model 6117-11)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING )
+
+SYST( 1992, premiere, 0, 0, premiere, premiere, premiere_state, empty_init, "Fidelity Electronics", "Elite Premiere", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )