Clone promoted to working

--------
Elite Avant Garde (model 6114-5) [hap, Berger]
This commit is contained in:
hap 2019-03-18 21:59:05 +01:00
parent c74da22ded
commit 528ab74d5e
2 changed files with 145 additions and 93 deletions

View File

@ -11,12 +11,10 @@ Excel 68000 I/O is very similar to EAG, so it's handled in this driver as well
TODO: TODO:
- USART is not emulated - USART is not emulated
- V5 CPU comms is unemulated, it's still playable but not at all as intended
- V9(68030 @ 32MHz) is faster than V10(68040 @ 25MHz) but it should be the other
way around, culprit is unemulated cache?
- V11 CPU should be M68EC060, not yet emulated. Now using M68EC040 in its place - V11 CPU should be M68EC060, not yet emulated. Now using M68EC040 in its place
at twice the frequency due to lack of superscalar. at twice the frequency due to lack of superscalar.
- V11 beeper is too high pitched, obviously related to wrong CPU type too - V11 beeper is too high pitched, related to wrong CPU type too? But even at 72MHz
it's still wrong, so maybe waitstates or clock divider on I/O access.
******************************************************************************* *******************************************************************************
@ -38,8 +36,7 @@ I/O is via TTL, overall very similar to EAG.
Elite Avant Garde (EAG, model 6114) Elite Avant Garde (EAG, model 6114)
----------------------------------- -----------------------------------
There are 5 versions of model 6114(V1 to V5). The one emulated here came from a V2, There are 5 versions of model 6114(V1 to V5):
but is practically emulated as a V4.
V1: 128KB DRAM, no EEPROM V1: 128KB DRAM, no EEPROM
V2: 128KB DRAM V2: 128KB DRAM
@ -78,7 +75,7 @@ Memory map: (of what is known)
300000-30000F W hi d0: NE591: 7seg data 300000-30000F W hi d0: NE591: 7seg data
300000-30000F W lo d0: NE591: LED data 300000-30000F W lo d0: NE591: LED data
300000-30000F R lo d7: 74259: keypad rows 0-7 300000-30000F R lo d7: 74259: keypad rows 0-7
400000-400001 W lo d0-d3: 74145/7442: led/keypad mux, buzzer out 400000-400007 W lo d0: 74259,74145/7442: led/keypad mux, buzzer out
400000-4????? R hi: external module slot 400000-4????? R hi: external module slot
700002-700003 R lo d7: 74251: keypad row 8 700002-700003 R lo d7: 74251: keypad row 8
604000-607FFF: 16KB EEPROM 604000-607FFF: 16KB EEPROM
@ -158,6 +155,7 @@ B0000x-xxxxxx: see V7, -800000
#include "includes/fidelbase.h" #include "includes/fidelbase.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "machine/gen_latch.h"
#include "machine/ram.h" #include "machine/ram.h"
#include "machine/nvram.h" #include "machine/nvram.h"
#include "sound/volt_reg.h" #include "sound/volt_reg.h"
@ -179,7 +177,12 @@ public:
{ } { }
// machine drivers // machine drivers
void eag(machine_config &config); void fex68k(machine_config &config);
void fex68km2(machine_config &config);
void fex68km3(machine_config &config);
void eagv2(machine_config &config);
void eagv3(machine_config &config);
void eagv5(machine_config &config); void eagv5(machine_config &config);
void eagv7(machine_config &config); void eagv7(machine_config &config);
void eagv9(machine_config &config); void eagv9(machine_config &config);
@ -195,10 +198,13 @@ protected:
optional_device<ram_device> m_ram; optional_device<ram_device> m_ram;
// address maps // address maps
void fex68k_map(address_map &map);
void fex68km2_map(address_map &map);
void fex68km3_map(address_map &map);
void eag_map(address_map &map); void eag_map(address_map &map);
void eagv7_map(address_map &map); void eagv7_map(address_map &map);
void eagv11_map(address_map &map); void eagv10_map(address_map &map);
void eagv5_slave_map(address_map &map);
// I/O handlers // I/O handlers
void prepare_display(); void prepare_display();
@ -209,26 +215,33 @@ protected:
DECLARE_WRITE8_MEMBER(digit_w); DECLARE_WRITE8_MEMBER(digit_w);
}; };
class excel68k_state : public eag_state class eagv5_state : public eag_state
{ {
public: public:
excel68k_state(const machine_config &mconfig, device_type type, const char *tag) : eagv5_state(const machine_config &mconfig, device_type type, const char *tag) :
eag_state(mconfig, type, tag) eag_state(mconfig, type, tag),
m_subcpu(*this, "subcpu"),
m_mainlatch(*this, "mainlatch"),
m_sublatch(*this, "sublatch")
{ } { }
// machine drivers // machine drivers
void fex68k(machine_config &config); void eagv5(machine_config &config);
void fex68km2(machine_config &config);
void fex68km3(machine_config &config);
private: private:
// address maps // devices/pointers
void fex68k_map(address_map &map); required_device<cpu_device> m_subcpu;
void fex68km2_map(address_map &map); required_device<generic_latch_8_device> m_mainlatch;
void fex68km3_map(address_map &map); required_device<generic_latch_8_device> m_sublatch;
// I/O handlers, mux_w is a little different // address maps
virtual DECLARE_WRITE8_MEMBER(mux_w) override; void main_map(address_map &map);
void sub_map(address_map &map);
// I/O handlers
DECLARE_WRITE8_MEMBER(reset_subcpu_w);
DECLARE_READ8_MEMBER(main_ack_r);
DECLARE_READ8_MEMBER(sub_ack_r);
}; };
@ -249,10 +262,14 @@ void eag_state::prepare_display()
WRITE8_MEMBER(eag_state::mux_w) WRITE8_MEMBER(eag_state::mux_w)
{ {
// d0-d3: 74145 A-D // a1-a3,d0: 74259
u8 mask = 1 << offset;
m_led_select = (m_led_select & ~mask) | ((data & 1) ? mask : 0);
// 74259 Q0-Q3: 74145 A-D (Q4-Q7 N/C)
// 74145 0-8: input mux, digit/led select // 74145 0-8: input mux, digit/led select
// 74145 9: speaker out // 74145 9: speaker out
u16 sel = 1 << (data & 0xf); u16 sel = 1 << (m_led_select & 0xf);
m_dac->write(BIT(sel, 9)); m_dac->write(BIT(sel, 9));
m_inp_mux = sel & 0x1ff; m_inp_mux = sel & 0x1ff;
prepare_display(); prepare_display();
@ -285,16 +302,24 @@ WRITE8_MEMBER(eag_state::digit_w)
} }
// fex68k-specific // EAG V5
WRITE8_MEMBER(excel68k_state::mux_w) WRITE8_MEMBER(eagv5_state::reset_subcpu_w)
{ {
// a1-a3,d0: 74259 // reset subcpu, from trigger to monostable 555 (R1=47K, C1=1uF)
u8 mask = 1 << offset; m_subcpu->pulse_input_line(INPUT_LINE_RESET, attotime::from_msec(52));
m_led_select = (m_led_select & ~mask) | ((data & 1) ? mask : 0); }
// 74259 Q0-Q3: 74145 A-D (Q4-Q7 N/C) READ8_MEMBER(eagv5_state::main_ack_r)
eag_state::mux_w(space, offset, m_led_select & 0xf); {
// d8,d9: latches ack state
return (m_mainlatch->pending_r() << 1 ^ 2) | m_sublatch->pending_r();
}
READ8_MEMBER(eagv5_state::sub_ack_r)
{
// d8,d9: latches ack state
return (m_sublatch->pending_r() << 1 ^ 2) | m_mainlatch->pending_r();
} }
@ -305,23 +330,23 @@ WRITE8_MEMBER(excel68k_state::mux_w)
// Excel 68000 // Excel 68000
void excel68k_state::fex68k_map(address_map &map) void eag_state::fex68k_map(address_map &map)
{ {
map(0x000000, 0x00ffff).rom(); map(0x000000, 0x00ffff).rom();
map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(excel68k_state::leds_w)).umask16(0x00ff); map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(eag_state::leds_w)).umask16(0x00ff);
map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(excel68k_state::digit_w)).umask16(0xff00); map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(eag_state::digit_w)).umask16(0xff00);
map(0x044000, 0x047fff).ram(); map(0x044000, 0x047fff).ram();
map(0x100000, 0x10000f).mirror(0x03fff0).r(FUNC(excel68k_state::input1_r)).umask16(0x00ff); map(0x100000, 0x10000f).mirror(0x03fff0).r(FUNC(eag_state::input1_r)).umask16(0x00ff);
map(0x140000, 0x14000f).mirror(0x03fff0).w(FUNC(excel68k_state::mux_w)).umask16(0x00ff); map(0x140000, 0x14000f).mirror(0x03fff0).w(FUNC(eag_state::mux_w)).umask16(0x00ff);
} }
void excel68k_state::fex68km2_map(address_map &map) void eag_state::fex68km2_map(address_map &map)
{ {
fex68k_map(map); fex68k_map(map);
map(0x200000, 0x21ffff).ram(); map(0x200000, 0x21ffff).ram();
} }
void excel68k_state::fex68km3_map(address_map &map) void eag_state::fex68km3_map(address_map &map)
{ {
fex68k_map(map); fex68k_map(map);
map(0x200000, 0x20ffff).ram(); map(0x200000, 0x20ffff).ram();
@ -342,13 +367,28 @@ void eag_state::eag_map(address_map &map)
map(0x104000, 0x107fff).ram(); map(0x104000, 0x107fff).ram();
map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(eag_state::digit_w)).umask16(0xff00).nopr(); 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::input1_r), FUNC(eag_state::leds_w)).umask16(0x00ff);
map(0x400000, 0x400007).w(FUNC(eag_state::mux_w)).umask16(0x00ff);
map(0x400000, 0x407fff).r(FUNC(eag_state::cartridge_r)).umask16(0xff00); map(0x400000, 0x407fff).r(FUNC(eag_state::cartridge_r)).umask16(0xff00);
map(0x400001, 0x400001).w(FUNC(eag_state::mux_w));
map(0x400002, 0x400007).nopw(); // ?
map(0x604000, 0x607fff).ram().share("nvram"); map(0x604000, 0x607fff).ram().share("nvram");
map(0x700003, 0x700003).r(FUNC(eag_state::input2_r)); map(0x700003, 0x700003).r(FUNC(eag_state::input2_r));
} }
void eagv5_state::main_map(address_map &map)
{
eag_map(map);
map(0x500000, 0x500000).r(m_sublatch, FUNC(generic_latch_8_device::read)).w(m_mainlatch, FUNC(generic_latch_8_device::write));
map(0x500002, 0x500002).rw(FUNC(eagv5_state::main_ack_r), FUNC(eagv5_state::reset_subcpu_w));
}
void eagv5_state::sub_map(address_map &map)
{
map(0x000000, 0x00ffff).rom();
map(0x000001, 0x000001).mirror(0x00fffe).w(m_sublatch, FUNC(generic_latch_8_device::write));
map(0x044000, 0x047fff).ram();
map(0x140000, 0x140000).r(FUNC(eagv5_state::sub_ack_r));
map(0x140001, 0x140001).r(m_mainlatch, FUNC(generic_latch_8_device::read));
}
void eag_state::eagv7_map(address_map &map) void eag_state::eagv7_map(address_map &map)
{ {
map(0x000000, 0x01ffff).rom(); map(0x000000, 0x01ffff).rom();
@ -356,34 +396,26 @@ void eag_state::eagv7_map(address_map &map)
map(0x200000, 0x2fffff).ram(); map(0x200000, 0x2fffff).ram();
map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(eag_state::digit_w)).umask32(0xff00ff00).nopr(); 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::input1_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff);
map(0x400000, 0x400007).w(FUNC(eag_state::mux_w)).umask32(0x00ff00ff);
map(0x400000, 0x407fff).r(FUNC(eag_state::cartridge_r)).umask32(0xff00ff00); map(0x400000, 0x407fff).r(FUNC(eag_state::cartridge_r)).umask32(0xff00ff00);
map(0x400001, 0x400001).w(FUNC(eag_state::mux_w));
map(0x400004, 0x400007).nopw(); // ?
map(0x604000, 0x607fff).ram().share("nvram"); map(0x604000, 0x607fff).ram().share("nvram");
map(0x700003, 0x700003).r(FUNC(eag_state::input2_r)); map(0x700003, 0x700003).r(FUNC(eag_state::input2_r));
map(0x800000, 0x807fff).ram(); map(0x800000, 0x807fff).ram();
} }
void eag_state::eagv11_map(address_map &map) void eag_state::eagv10_map(address_map &map)
{ {
map(0x00000000, 0x0001ffff).rom(); map(0x00000000, 0x0001ffff).rom();
map(0x00200000, 0x003fffff).ram(); map(0x00200000, 0x003fffff).ram();
map(0x00b00000, 0x00b0000f).mirror(0x00000010).w(FUNC(eag_state::digit_w)).umask32(0xff00ff00).nopr(); 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::input1_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff);
map(0x00c00000, 0x00c00007).w(FUNC(eag_state::mux_w)).umask32(0x00ff00ff);
map(0x00c00000, 0x00c07fff).r(FUNC(eag_state::cartridge_r)).umask32(0xff00ff00); map(0x00c00000, 0x00c07fff).r(FUNC(eag_state::cartridge_r)).umask32(0xff00ff00);
map(0x00c00001, 0x00c00001).w(FUNC(eag_state::mux_w));
map(0x00c00004, 0x00c00007).nopw(); // ?
map(0x00e04000, 0x00e07fff).ram().share("nvram"); map(0x00e04000, 0x00e07fff).ram().share("nvram");
map(0x00f00003, 0x00f00003).r(FUNC(eag_state::input2_r)); map(0x00f00003, 0x00f00003).r(FUNC(eag_state::input2_r));
map(0x01000000, 0x0101ffff).ram(); map(0x01000000, 0x0101ffff).ram();
} }
void eag_state::eagv5_slave_map(address_map &map)
{
map(0x000000, 0x00ffff).rom();
map(0x044000, 0x047fff).ram();
}
/****************************************************************************** /******************************************************************************
@ -434,18 +466,18 @@ INPUT_PORTS_END
Machine Drivers Machine Drivers
******************************************************************************/ ******************************************************************************/
void excel68k_state::fex68k(machine_config &config) void eag_state::fex68k(machine_config &config)
{ {
/* basic machine hardware */ /* basic machine hardware */
M68000(config, m_maincpu, 12_MHz_XTAL); // HD68HC000P12 M68000(config, m_maincpu, 12_MHz_XTAL); // HD68HC000P12
m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68k_map); m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::fex68k_map);
const attotime irq_period = attotime::from_hz(618); // theoretical frequency from 556 timer (22nF, 91K + 20K POT @ 14.8K, 0.1K), measurement was 580Hz const attotime irq_period = attotime::from_hz(618); // theoretical frequency from 556 timer (22nF, 91K + 20K POT @ 14.8K, 0.1K), measurement was 580Hz
TIMER(config, m_irq_on).configure_periodic(FUNC(excel68k_state::irq_on<M68K_IRQ_2>), irq_period); TIMER(config, m_irq_on).configure_periodic(FUNC(eag_state::irq_on<M68K_IRQ_2>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(1528)); // active for 1.525us m_irq_on->set_start_delay(irq_period - attotime::from_nsec(1528)); // active for 1.525us
TIMER(config, "irq_off").configure_periodic(FUNC(excel68k_state::irq_off<M68K_IRQ_2>), irq_period); TIMER(config, "irq_off").configure_periodic(FUNC(eag_state::irq_off<M68K_IRQ_2>), irq_period);
TIMER(config, "display_decay").configure_periodic(FUNC(excel68k_state::display_decay_tick), attotime::from_msec(1)); TIMER(config, "display_decay").configure_periodic(FUNC(eag_state::display_decay_tick), attotime::from_msec(1));
config.set_default_layout(layout_fidel_ex_68k); config.set_default_layout(layout_fidel_ex_68k);
/* sound hardware */ /* sound hardware */
@ -454,21 +486,21 @@ void excel68k_state::fex68k(machine_config &config)
VOLTAGE_REGULATOR(config, "vref").add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); VOLTAGE_REGULATOR(config, "vref").add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
} }
void excel68k_state::fex68km2(machine_config &config) void eag_state::fex68km2(machine_config &config)
{ {
fex68k(config); fex68k(config);
/* basic machine hardware */ /* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68km2_map); m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::fex68km2_map);
} }
void excel68k_state::fex68km3(machine_config &config) void eag_state::fex68km3(machine_config &config)
{ {
fex68k(config); fex68k(config);
/* basic machine hardware */ /* basic machine hardware */
m_maincpu->set_clock(16_MHz_XTAL); // factory overclock m_maincpu->set_clock(16_MHz_XTAL); // factory overclock
m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68km3_map); m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::fex68km3_map);
} }
void eag_state::eag_base(machine_config &config) void eag_state::eag_base(machine_config &config)
@ -477,7 +509,7 @@ void eag_state::eag_base(machine_config &config)
M68000(config, m_maincpu, 16_MHz_XTAL); M68000(config, m_maincpu, 16_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eag_map); m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eag_map);
const attotime irq_period = attotime::from_hz(4.9152_MHz_XTAL/0x2000); // 600Hz const attotime irq_period = attotime::from_hz(4.9152_MHz_XTAL/0x2000); // 4060 Q13, 600Hz
TIMER(config, m_irq_on).configure_periodic(FUNC(eag_state::irq_on<M68K_IRQ_2>), irq_period); TIMER(config, m_irq_on).configure_periodic(FUNC(eag_state::irq_on<M68K_IRQ_2>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(8250)); // active for 8.25us m_irq_on->set_start_delay(irq_period - attotime::from_nsec(8250)); // active for 8.25us
TIMER(config, "irq_off").configure_periodic(FUNC(eag_state::irq_off<M68K_IRQ_2>), irq_period); TIMER(config, "irq_off").configure_periodic(FUNC(eag_state::irq_off<M68K_IRQ_2>), irq_period);
@ -499,21 +531,41 @@ void eag_state::eag_base(machine_config &config)
SOFTWARE_LIST(config, "cart_list").set_original("fidel_scc"); SOFTWARE_LIST(config, "cart_list").set_original("fidel_scc");
} }
void eag_state::eag(machine_config &config) void eag_state::eagv2(machine_config &config)
{ {
eag_base(config); eag_base(config);
RAM(config, m_ram).set_default_size("1M").set_extra_options("128K, 512K, 1M");
}
void eag_state::eagv5(machine_config &config)
{
eag(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("128K");
}
m68000_device &subcpu(M68000(config, "subcpu", 16_MHz_XTAL)); void eag_state::eagv3(machine_config &config)
subcpu.set_addrmap(AS_PROGRAM, &eag_state::eagv5_slave_map); {
eagv2(config);
/* basic machine hardware */
m_ram->set_default_size("512K");
}
void eagv5_state::eagv5(machine_config &config)
{
eagv2(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &eagv5_state::main_map);
M68000(config, m_subcpu, 16_MHz_XTAL);
m_subcpu->set_addrmap(AS_PROGRAM, &eagv5_state::sub_map);
m_subcpu->set_periodic_int(FUNC(eagv5_state::irq2_line_hold), attotime::from_hz(16_MHz_XTAL/0x4000)); // 4060 Q14, ~1kHz
GENERIC_LATCH_8(config, m_mainlatch);
GENERIC_LATCH_8(config, m_sublatch);
m_sublatch->data_pending_callback().set_inputline(m_maincpu, M68K_IRQ_1); // IPL0
// 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.m_perfect_cpu_quantum = subtag("maincpu");
} }
void eag_state::eagv7(machine_config &config) void eag_state::eagv7(machine_config &config)
@ -521,7 +573,7 @@ void eag_state::eagv7(machine_config &config)
eag_base(config); eag_base(config);
/* basic machine hardware */ /* basic machine hardware */
M68020(config.replace(), m_maincpu, 20_MHz_XTAL); M68020(config.replace(), m_maincpu, 20_MHz_XTAL); // also seen with 25MHz XTAL
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv7_map); m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv7_map);
} }
@ -530,7 +582,7 @@ void eag_state::eagv9(machine_config &config)
eagv7(config); eagv7(config);
/* basic machine hardware */ /* basic machine hardware */
M68030(config.replace(), m_maincpu, 32_MHz_XTAL); M68030(config.replace(), m_maincpu, 32_MHz_XTAL/2); // also seen with 40MHz XTAL
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv7_map); m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv7_map);
} }
@ -540,7 +592,7 @@ void eag_state::eagv10(machine_config &config)
/* basic machine hardware */ /* basic machine hardware */
M68040(config.replace(), m_maincpu, 25_MHz_XTAL); M68040(config.replace(), m_maincpu, 25_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv11_map); m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv10_map);
} }
void eag_state::eagv11(machine_config &config) void eag_state::eagv11(machine_config &config)
@ -549,7 +601,7 @@ void eag_state::eagv11(machine_config &config)
/* basic machine hardware */ /* basic machine hardware */
M68EC040(config.replace(), m_maincpu, 36_MHz_XTAL*2*2); // wrong! should be M68EC060 @ 72MHz M68EC040(config.replace(), m_maincpu, 36_MHz_XTAL*2*2); // wrong! should be M68EC060 @ 72MHz
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv11_map); m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv10_map);
m_maincpu->set_periodic_int(FUNC(eag_state::irq2_line_hold), attotime::from_hz(600)); m_maincpu->set_periodic_int(FUNC(eag_state::irq2_line_hold), attotime::from_hz(600));
config.device_remove("irq_on"); // 8.25us is too long config.device_remove("irq_on"); // 8.25us is too long
@ -593,24 +645,24 @@ ROM_START( fex68km3 ) // model 6098, PCB label 510.1120B01
ROM_END ROM_END
ROM_START( feagv2 ) // from a V2 board ROM_START( feagv2 )
ROM_REGION16_BE( 0x20000, "maincpu", 0 ) ROM_REGION16_BE( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE("6114_e5_yellow.u22", 0x00000, 0x10000, CRC(f9c7bada) SHA1(60e545f829121b9a4f1100d9e85ac83797715e80) ) // 27c512 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("6114_o5_green.u19", 0x00001, 0x10000, CRC(04f97b22) SHA1(8b2845dd115498f7b385e8948eca6a5893c223d1) ) // "
ROM_END ROM_END
ROM_START( feagv2a ) // from a V3 board ROM_START( feagv3 )
ROM_REGION16_BE( 0x20000, "maincpu", 0 ) 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_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("elite_1.6_o.u19", 0x00001, 0x10000, CRC(904c7061) SHA1(742110576cf673321440bc81a4dae4c949b49e38) )
ROM_END ROM_END
ROM_START( feagv5 ) ROM_START( feagv5 )
ROM_REGION( 0x20000, "maincpu", 0 ) ROM_REGION( 0x20000, "maincpu", 0 ) // PCB label 510.1136A01
ROM_LOAD16_BYTE("master_e", 0x00000, 0x10000, CRC(e424bddc) SHA1(ff03656addfe5c47f06df2efb4602f43a9e19d96) ) ROM_LOAD16_BYTE("master_e", 0x00000, 0x10000, CRC(e424bddc) SHA1(ff03656addfe5c47f06df2efb4602f43a9e19d96) )
ROM_LOAD16_BYTE("master_o", 0x00001, 0x10000, CRC(33a00894) SHA1(849460332b1ac10d452ca3631eb99f5597511b73) ) ROM_LOAD16_BYTE("master_o", 0x00001, 0x10000, CRC(33a00894) SHA1(849460332b1ac10d452ca3631eb99f5597511b73) )
ROM_REGION( 0x10000, "subcpu", 0 ) ROM_REGION( 0x10000, "subcpu", 0 ) // PCB label 510.1138B01
ROM_LOAD16_BYTE("slave_e", 0x00000, 0x08000, CRC(eea4de52) SHA1(a64ca8a44b431e2fa7f00e44cab7e6aa2d4a9403) ) ROM_LOAD16_BYTE("slave_e", 0x00000, 0x08000, CRC(eea4de52) SHA1(a64ca8a44b431e2fa7f00e44cab7e6aa2d4a9403) )
ROM_LOAD16_BYTE("slave_o", 0x00001, 0x08000, CRC(35fe2fdf) SHA1(731da12ee290bad9bc03cffe281c8cc48e555dfb) ) ROM_LOAD16_BYTE("slave_o", 0x00001, 0x08000, CRC(35fe2fdf) SHA1(731da12ee290bad9bc03cffe281c8cc48e555dfb) )
ROM_END ROM_END
@ -657,17 +709,17 @@ ROM_END
******************************************************************************/ ******************************************************************************/
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS // 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 | MACHINE_IMPERFECT_CONTROLS ) CONS( 1987, fex68k, 0, 0, fex68k, excel68k, eag_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1987, fex68ka, fex68k, 0, fex68k, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1987, fex68ka, fex68k, 0, fex68k, excel68k, eag_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1987, fex68kb, fex68k, 0, fex68k, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1987, fex68kb, fex68k, 0, fex68k, excel68k, eag_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1988, fex68km2, fex68k, 0, fex68km2, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach II (rev. C+)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1988, fex68km2, fex68k, 0, fex68km2, excel68k, eag_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach II (rev. C+)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1988, fex68km3, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1988, fex68km3, fex68k, 0, fex68km3, excel68k, eag_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1989, feagv2, 0, 0, eag, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) 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 | MACHINE_IMPERFECT_CONTROLS )
CONS( 1989, feagv2a, feagv2, 0, eag, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) 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 | MACHINE_IMPERFECT_CONTROLS )
CONS( 1989, feagv5, feagv2, 0, eagv5, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6114-5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING ) 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 | MACHINE_IMPERFECT_CONTROLS )
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 | MACHINE_IMPERFECT_CONTROLS ) 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 | MACHINE_IMPERFECT_CONTROLS )
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 | MACHINE_IMPERFECT_CONTROLS ) 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 | MACHINE_IMPERFECT_CONTROLS )
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 | MACHINE_IMPERFECT_CONTROLS ) 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 | MACHINE_IMPERFECT_CONTROLS )
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_CONTROLS | MACHINE_IMPERFECT_TIMING ) 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_CONTROLS )
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_CONTROLS | 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_CONTROLS | MACHINE_IMPERFECT_TIMING | MACHINE_IMPERFECT_SOUND )

View File

@ -12907,7 +12907,7 @@ fdes2325 //
feagv10 // feagv10 //
feagv11 // feagv11 //
feagv2 // feagv2 //
feagv2a // feagv3 //
feagv5 // feagv5 //
feagv7 // feagv7 //
feagv7a // feagv7a //