chess*: refactor irq timers (nw)

This commit is contained in:
hap 2019-02-11 18:34:52 +01:00
parent 502197b9c8
commit 26c85d7e25
15 changed files with 191 additions and 134 deletions

View File

@ -111,13 +111,19 @@ public:
// adjustments
void reset() { adjust(attotime::never, 0, attotime::never); }
void adjust(const attotime &duration, s32 param = 0, const attotime &period = attotime::never) const { assert(m_type == TIMER_TYPE_GENERIC); m_timer->adjust(duration, param, period); }
void adjust(const attotime &duration, s32 param = 0, const attotime &period = attotime::never)
{
assert(m_type == TIMER_TYPE_GENERIC);
m_period = period;
m_timer->adjust(duration, param, period);
}
// timing information
attotime time_elapsed() const { return m_timer->elapsed(); }
attotime time_left() const { return m_timer->remaining(); }
attotime start_time() const { return m_timer->start(); }
attotime fire_time() const { return m_timer->expire(); }
attotime period() const { return m_period; }
private:
// device-level overrides

View File

@ -83,6 +83,7 @@ public:
attotime remaining() const;
attotime start() const { return m_start; }
attotime expire() const { return m_expire; }
attotime period() const { return m_period; }
private:
// internal helpers

View File

@ -40,9 +40,10 @@ Master:
class ckz80_state : public driver_device
{
public:
ckz80_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
ckz80_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_irq_on(*this, "irq_on"),
m_dac(*this, "dac"),
m_master_map(*this, "master_map"),
m_inp_matrix(*this, "IN.%u", 0),
@ -56,6 +57,7 @@ public:
// devices/pointers
required_device<cpu_device> m_maincpu;
required_device<timer_device> m_irq_on;
required_device<dac_2bit_binary_weighted_ones_complement_device> m_dac;
optional_device<address_map_bank_device> m_master_map;
optional_ioport_array<10> m_inp_matrix; // max 10
@ -63,8 +65,8 @@ public:
output_finder<0x20> m_out_a;
output_finder<0x20> m_out_digit;
TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); }
TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); }
template<int L> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(L, ASSERT_LINE); }
template<int L> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(L, CLEAR_LINE); }
// misc common
u16 m_inp_mux; // multiplexed keypad mask
@ -436,13 +438,13 @@ MACHINE_CONFIG_START(ckz80_state::master)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", Z80, 8_MHz_XTAL/2)
MCFG_DEVICE_PROGRAM_MAP(master_trampoline)
timer_device &irq_on(TIMER(config, "irq_on"));
irq_on.configure_periodic(FUNC(ckz80_state::irq_on), attotime::from_hz(429)); // theoretical frequency from 555 timer (22nF, 150K, 1K5), measurement was 418Hz
irq_on.set_start_delay(attotime::from_hz(429) - attotime::from_nsec(22870)); // active for 22.87us
TIMER(config, "irq_off").configure_periodic(FUNC(ckz80_state::irq_off), attotime::from_hz(429));
ADDRESS_MAP_BANK(config, "master_map").set_map(&ckz80_state::master_map).set_options(ENDIANNESS_LITTLE, 8, 16);
const attotime irq_period = attotime::from_hz(429); // theoretical frequency from 555 timer (22nF, 150K, 1K5), measurement was 418Hz
TIMER(config, m_irq_on).configure_periodic(FUNC(ckz80_state::irq_on<INPUT_LINE_IRQ0>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(22870)); // active for 22.87us
TIMER(config, "irq_off").configure_periodic(FUNC(ckz80_state::irq_off<INPUT_LINE_IRQ0>), irq_period);
TIMER(config, "display_decay").configure_periodic(FUNC(ckz80_state::display_decay_tick), attotime::from_msec(1));
config.set_default_layout(layout_ck_master);

View File

@ -37,9 +37,10 @@ Chess 2001:
class cxgz80_state : public driver_device
{
public:
cxgz80_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
cxgz80_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_irq_on(*this, "irq_on"),
m_dac(*this, "dac"),
m_speaker_off_timer(*this, "speaker_off"),
m_inp_matrix(*this, "IN.%u", 0),
@ -53,6 +54,7 @@ public:
// devices/pointers
required_device<cpu_device> m_maincpu;
required_device<timer_device> m_irq_on;
required_device<dac_bit_interface> m_dac;
required_device<timer_device> m_speaker_off_timer;
optional_ioport_array<10> m_inp_matrix; // max 10
@ -60,8 +62,8 @@ public:
output_finder<0x20> m_out_a;
output_finder<0x20> m_out_digit;
TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); }
TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); }
template<int L> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(L, ASSERT_LINE); }
template<int L> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(L, CLEAR_LINE); }
// misc common
u16 m_inp_mux; // multiplexed keypad mask
@ -399,10 +401,11 @@ MACHINE_CONFIG_START(cxgz80_state::ch2001)
/* basic machine hardware */
Z80(config, m_maincpu, 8_MHz_XTAL/2);
m_maincpu->set_addrmap(AS_PROGRAM, &cxgz80_state::ch2001_map);
timer_device &irq_on(TIMER(config, "irq_on"));
irq_on.configure_periodic(FUNC(cxgz80_state::irq_on), attotime::from_hz(484)); // theoretical frequency from 555 timer (22nF, 100K+33K, 1K2), measurement was 568Hz
irq_on.set_start_delay(attotime::from_hz(484) - attotime::from_nsec(18300)); // active for 18.3us
TIMER(config, "irq_off").configure_periodic(FUNC(cxgz80_state::irq_off), attotime::from_hz(484));
const attotime irq_period = attotime::from_hz(484); // theoretical frequency from 555 timer (22nF, 100K+33K, 1K2), measurement was 568Hz
TIMER(config, m_irq_on).configure_periodic(FUNC(cxgz80_state::irq_on<INPUT_LINE_IRQ0>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(18300)); // active for 18.3us
TIMER(config, "irq_off").configure_periodic(FUNC(cxgz80_state::irq_off<INPUT_LINE_IRQ0>), irq_period);
TIMER(config, m_speaker_off_timer).configure_generic(FUNC(cxgz80_state::speaker_off_callback));

View File

@ -469,13 +469,12 @@ I/O is via TTL, very similar to Designer Display
class fidel6502_state : public fidelbase_state
{
public:
fidel6502_state(const machine_config &mconfig, device_type type, const char *tag)
: fidelbase_state(mconfig, type, tag),
fidel6502_state(const machine_config &mconfig, device_type type, const char *tag) :
fidelbase_state(mconfig, type, tag),
m_ppi8255(*this, "ppi8255"),
m_rombank(*this, "rombank"),
m_mainmap(*this, "mainmap"),
m_div_config(*this, "div_config"),
m_irq_on(*this, "irq_on")
m_div_config(*this, "div_config")
{ }
void csc(machine_config &config);
@ -529,13 +528,8 @@ private:
optional_memory_bank m_rombank;
optional_device<address_map_bank_device> m_mainmap;
optional_ioport m_div_config;
optional_device<timer_device> m_irq_on;
// common
TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); }
TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); }
TIMER_DEVICE_CALLBACK_MEMBER(dummy) { ; } // config.m_perfect_cpu_quantum = subtag("maincpu"); didn't work
void div_trampoline_w(offs_t offset, u8 data);
u8 div_trampoline_r(offs_t offset);
void div_set_cpu_freq(offs_t offset);
@ -1839,10 +1833,10 @@ void fidel6502_state::rsc(machine_config &config)
M6502(config, m_maincpu, 1800000); // measured approx 1.81MHz
m_maincpu->set_addrmap(AS_PROGRAM, &fidel6502_state::rsc_map);
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on), attotime::from_hz(546)); // from 555 timer, measured
m_irq_on->set_start_delay(attotime::from_hz(546) - attotime::from_usec(38)); // active for 38us
TIMER(config, "irq_off").configure_periodic(FUNC(fidel6502_state::irq_off), attotime::from_hz(546));
const attotime irq_period = attotime::from_hz(546); // from 555 timer, measured
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on<M6502_IRQ_LINE>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_usec(38)); // active for 38us
TIMER(config, "irq_off").configure_periodic(FUNC(fidel6502_state::irq_off<M6502_IRQ_LINE>), irq_period);
pia6821_device &pia(PIA6821(config, "pia", 0)); // MOS 6520
pia.readpa_handler().set(FUNC(fidel6502_state::csc_pia1_pa_r));
@ -1870,9 +1864,10 @@ void fidel6502_state::csc(machine_config &config)
M6502(config, m_maincpu, 3.9_MHz_XTAL/2); // from 3.9MHz resonator
m_maincpu->set_addrmap(AS_PROGRAM, &fidel6502_state::csc_map);
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on), attotime::from_hz(38.4_kHz_XTAL/64)); // through 4060 IC, 600Hz
m_irq_on->set_start_delay(attotime::from_hz(38.4_kHz_XTAL/64) - attotime::from_hz(38.4_kHz_XTAL*2)); // edge!
TIMER(config, "irq_off").configure_periodic(FUNC(fidel6502_state::irq_off), attotime::from_hz(38.4_kHz_XTAL/64));
const attotime irq_period = attotime::from_hz(38.4_kHz_XTAL/64); // through 4060 IC, 600Hz
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on<M6502_IRQ_LINE>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_hz(38.4_kHz_XTAL*2)); // edge!
TIMER(config, "irq_off").configure_periodic(FUNC(fidel6502_state::irq_off<M6502_IRQ_LINE>), irq_period);
pia6821_device &pia0(PIA6821(config, "pia0", 0));
pia0.readpb_handler().set(FUNC(fidel6502_state::csc_pia0_pb_r));
@ -1920,15 +1915,15 @@ void fidel6502_state::eas_base(machine_config &config)
/* basic machine hardware */
R65C02(config, m_maincpu, 3_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &fidel6502_state::div_trampoline);
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on), attotime::from_hz(38.4_kHz_XTAL/64)); // through 4060 IC, 600Hz
m_irq_on->set_start_delay(attotime::from_hz(38.4_kHz_XTAL/64) - attotime::from_hz(38.4_kHz_XTAL*2)); // edge!
TIMER(config, "irq_off").configure_periodic(FUNC(fidel6502_state::irq_off), attotime::from_hz(38.4_kHz_XTAL/64));
TIMER(config, "dummy_timer").configure_periodic(FUNC(fidel6502_state::dummy), attotime::from_hz(3_MHz_XTAL));
ADDRESS_MAP_BANK(config, m_mainmap).set_map(&fidel6502_state::eas_map).set_options(ENDIANNESS_LITTLE, 8, 16);
TIMER(config, "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(3_MHz_XTAL));
const attotime irq_period = attotime::from_hz(38.4_kHz_XTAL/64); // through 4060 IC, 600Hz
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on<M6502_IRQ_LINE>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_hz(38.4_kHz_XTAL*2)); // edge!
TIMER(config, "irq_off").configure_periodic(FUNC(fidel6502_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_eas);
@ -1970,9 +1965,8 @@ void fidel6502_state::pc(machine_config &config)
/* basic machine hardware */
m_maincpu->set_clock(4_MHz_XTAL); // R65C02P4
TIMER(config.replace(), "dummy_timer").configure_periodic(FUNC(fidel6502_state::dummy), attotime::from_hz(4_MHz_XTAL));
m_mainmap->set_addrmap(AS_PROGRAM, &fidel6502_state::pc_map);
TIMER(config.replace(), "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(4_MHz_XTAL));
config.set_default_layout(layout_fidel_pc);
}
@ -1984,9 +1978,8 @@ void fidel6502_state::eag(machine_config &config)
/* basic machine hardware */
m_maincpu->set_clock(5_MHz_XTAL); // R65C02P4
TIMER(config.replace(), "dummy_timer").configure_periodic(FUNC(fidel6502_state::dummy), attotime::from_hz(5_MHz_XTAL));
m_mainmap->set_addrmap(AS_PROGRAM, &fidel6502_state::eag_map);
TIMER(config.replace(), "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(5_MHz_XTAL));
config.set_default_layout(layout_fidel_eag);
}
@ -1996,9 +1989,11 @@ void fidel6502_state::sc9d(machine_config &config)
/* basic machine hardware */
M6502(config, m_maincpu, 3.9_MHz_XTAL/2); // R6502AP, 3.9MHz resonator
m_maincpu->set_addrmap(AS_PROGRAM, &fidel6502_state::sc9d_map);
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on), attotime::from_hz(610)); // from 555 timer (22nF, 102K, 2.7K)
m_irq_on->set_start_delay(attotime::from_hz(610) - attotime::from_usec(41)); // active for 41us
TIMER(config, "irq_off").configure_periodic(FUNC(fidel6502_state::irq_off), attotime::from_hz(610));
const attotime irq_period = attotime::from_hz(610); // from 555 timer (22nF, 102K, 2.7K)
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on<M6502_IRQ_LINE>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_usec(41)); // active for 41us
TIMER(config, "irq_off").configure_periodic(FUNC(fidel6502_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_sc9);
@ -2050,14 +2045,15 @@ void fidel6502_state::sc12(machine_config &config)
/* basic machine hardware */
R65C02(config, m_maincpu, 3_MHz_XTAL); // R65C02P3
m_maincpu->set_addrmap(AS_PROGRAM, &fidel6502_state::div_trampoline);
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on), attotime::from_hz(630)); // from 556 timer (22nF, 102K, 1K)
m_irq_on->set_start_delay(attotime::from_hz(630) - attotime::from_nsec(15250)); // active for 15.25us
TIMER(config, "irq_off").configure_periodic(FUNC(fidel6502_state::irq_off), attotime::from_hz(630));
TIMER(config, "dummy_timer").configure_periodic(FUNC(fidel6502_state::dummy), attotime::from_hz(3_MHz_XTAL));
ADDRESS_MAP_BANK(config, m_mainmap).set_map(&fidel6502_state::sc12_map).set_options(ENDIANNESS_LITTLE, 8, 16);
TIMER(config, "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(3_MHz_XTAL));
const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K)
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_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(fidel6502_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_sc12);
@ -2084,11 +2080,12 @@ void fidel6502_state::sc12b(machine_config &config)
m_maincpu->set_clock(4_MHz_XTAL); // R65C02P4
// change irq timer frequency
TIMER(config.replace(), m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on), attotime::from_hz(596)); // from 556 timer (22nF, 82K+26K, 1K)
m_irq_on->set_start_delay(attotime::from_hz(596) - attotime::from_nsec(15250)); // active for 15.25us
TIMER(config.replace(), "irq_off").configure_periodic(FUNC(fidel6502_state::irq_off), attotime::from_hz(596));
const attotime irq_period = attotime::from_hz(596); // from 556 timer (22nF, 82K+26K, 1K)
TIMER(config.replace(), m_irq_on).configure_periodic(FUNC(fidel6502_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(fidel6502_state::irq_off<M6502_IRQ_LINE>), irq_period);
TIMER(config.replace(), "dummy_timer").configure_periodic(FUNC(fidel6502_state::dummy), attotime::from_hz(4_MHz_XTAL));
TIMER(config.replace(), "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(4_MHz_XTAL));
}
void fidel6502_state::as12(machine_config &config)
@ -2099,9 +2096,10 @@ void fidel6502_state::as12(machine_config &config)
m_mainmap->set_addrmap(AS_PROGRAM, &fidel6502_state::as12_map);
// change irq timer frequency
TIMER(config.replace(), m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on), attotime::from_hz(585)); // from 556 timer (22nF, 110K, 1K)
m_irq_on->set_start_delay(attotime::from_hz(585) - attotime::from_nsec(15250)); // active for 15.25us
TIMER(config.replace(), "irq_off").configure_periodic(FUNC(fidel6502_state::irq_off), attotime::from_hz(585));
const attotime irq_period = attotime::from_hz(585); // from 556 timer (22nF, 110K, 1K)
TIMER(config.replace(), m_irq_on).configure_periodic(FUNC(fidel6502_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(fidel6502_state::irq_off<M6502_IRQ_LINE>), irq_period);
config.set_default_layout(layout_fidel_as12);
}
@ -2111,9 +2109,11 @@ void fidel6502_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, &fidel6502_state::fexcel_map);
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on), attotime::from_hz(630)); // from 556 timer (22nF, 102K, 1K)
m_irq_on->set_start_delay(attotime::from_hz(630) - attotime::from_nsec(15250)); // active for 15.25us
TIMER(config, "irq_off").configure_periodic(FUNC(fidel6502_state::irq_off), attotime::from_hz(630));
const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K)
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_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(fidel6502_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);
@ -2169,9 +2169,10 @@ void fidel6502_state::fdes2100(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &fidel6502_state::fexcelp_map);
// change irq timer frequency
TIMER(config.replace(), m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on), attotime::from_hz(585)); // from 556 timer (22nF, 110K, 1K)
m_irq_on->set_start_delay(attotime::from_hz(585) - attotime::from_nsec(15250)); // active for 15.25us
TIMER(config.replace(), "irq_off").configure_periodic(FUNC(fidel6502_state::irq_off), attotime::from_hz(585));
const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K)
TIMER(config.replace(), m_irq_on).configure_periodic(FUNC(fidel6502_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(fidel6502_state::irq_off<M6502_IRQ_LINE>), irq_period);
config.set_default_layout(layout_fidel_des);
}
@ -2208,9 +2209,11 @@ void fidel6502_state::fdes2100d(machine_config &config)
/* basic machine hardware */
M65C02(config, m_maincpu, 6_MHz_XTAL); // W65C02P-6
m_maincpu->set_addrmap(AS_PROGRAM, &fidel6502_state::fdesdis_map);
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on), attotime::from_hz(630)); // from 556 timer (22nF, 102K, 1K)
m_irq_on->set_start_delay(attotime::from_hz(630) - attotime::from_nsec(15250)); // active for 15.25us
TIMER(config, "irq_off").configure_periodic(FUNC(fidel6502_state::irq_off), attotime::from_hz(630));
const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K)
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_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(fidel6502_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_desdis);
@ -2257,9 +2260,11 @@ void fidel6502_state::chesster(machine_config &config)
/* basic machine hardware */
R65C02(config, m_maincpu, 5_MHz_XTAL); // RP65C02G
m_maincpu->set_addrmap(AS_PROGRAM, &fidel6502_state::chesster_map);
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on), attotime::from_hz(9615)); // R/C circuit, measured
m_irq_on->set_start_delay(attotime::from_hz(9615) - attotime::from_nsec(2600)); // active for 2.6us
TIMER(config, "irq_off").configure_periodic(FUNC(fidel6502_state::irq_off), attotime::from_hz(9615));
const attotime irq_period = attotime::from_hz(9615); // R/C circuit, measured
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on<M6502_IRQ_LINE>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(2600)); // active for 2.6us
TIMER(config, "irq_off").configure_periodic(FUNC(fidel6502_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_chesster);

View File

@ -12,6 +12,7 @@
TODO:
- 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
@ -68,7 +69,7 @@ V1: 128KB DRAM, no EEPROM
V2: 128KB DRAM
V3: 512KB DRAM
V4: 1MB DRAM
V5: 128KB+64KB DRAM, dual-CPU! (2*68K @ 16MHz)
V5: 128KB+16KB DRAM, dual-CPU! (2*68K @ 16MHz)
V6-V11 are on model 6117. Older 1986 model 6081/6088/6089 uses a 6502 CPU.
@ -112,7 +113,7 @@ Memory map: (of what is known)
Elite Avant Garde (EAG, model 6117)
-----------------------------------
There are 6 versions of model 6114(V6 to V11). From a programmer's point of view,
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
@ -197,8 +198,8 @@ B0000x-xxxxxx: see V7, -800000
class fidel68k_state : public fidelbase_state
{
public:
fidel68k_state(const machine_config &mconfig, device_type type, const char *tag)
: fidelbase_state(mconfig, type, tag),
fidel68k_state(const machine_config &mconfig, device_type type, const char *tag) :
fidelbase_state(mconfig, type, tag),
m_ram(*this, "ram")
{ }
@ -212,6 +213,7 @@ public:
void eag_base(machine_config &config);
void eag(machine_config &config);
void eagv5(machine_config &config);
void eagv7(machine_config &config);
void eagv9(machine_config &config);
void eagv10(machine_config &config);
@ -221,9 +223,6 @@ public:
private:
optional_device<ram_device> m_ram;
TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(M68K_IRQ_2, ASSERT_LINE); }
TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(M68K_IRQ_2, CLEAR_LINE); }
// Excel 68000
DECLARE_WRITE8_MEMBER(fex68k_mux_w);
void fex68k_map(address_map &map);
@ -247,6 +246,7 @@ private:
void eag_map(address_map &map);
void eagv7_map(address_map &map);
void eagv11_map(address_map &map);
void eagv5_slave_map(address_map &map);
};
@ -451,7 +451,7 @@ void fidel68k_state::fdes2325_map(address_map &map)
void fidel68k_state::init_eag()
{
// eag_map: DRAM slots at $200000-$2fffff - V1/V2: 128K, V3: 512K, V4: 1M
// eag_map: DRAM slots at $200000-$2fffff - V1/V2/V5: 128K, V3: 512K, V4: 1M
m_maincpu->space(AS_PROGRAM).install_ram(0x200000, 0x200000 + m_ram->size() - 1, m_ram->pointer());
}
@ -497,6 +497,12 @@ void fidel68k_state::eagv11_map(address_map &map)
map(0x01000000, 0x0101ffff).ram();
}
void fidel68k_state::eagv5_slave_map(address_map &map)
{
map(0x000000, 0x00ffff).rom();
map(0x044000, 0x047fff).ram();
}
/******************************************************************************
@ -567,10 +573,11 @@ MACHINE_CONFIG_START(fidel68k_state::fex68k)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", M68000, 12_MHz_XTAL) // HD68HC000P12
MCFG_DEVICE_PROGRAM_MAP(fex68k_map)
timer_device &irq_on(TIMER(config, "irq_on"));
irq_on.configure_periodic(FUNC(fidel68k_state::irq_on), attotime::from_hz(618)); // theoretical frequency from 556 timer (22nF, 91K + 20K POT @ 14.8K, 0.1K), measurement was 580Hz
irq_on.set_start_delay(attotime::from_hz(597) - attotime::from_nsec(1528)); // active for 1.525us
TIMER(config, "irq_off").configure_periodic(FUNC(fidel68k_state::irq_off), attotime::from_hz(618));
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(fidel68k_state::irq_on<M68K_IRQ_2>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(1528)); // active for 1.525us
TIMER(config, "irq_off").configure_periodic(FUNC(fidel68k_state::irq_off<M68K_IRQ_2>), 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_68k);
@ -604,10 +611,11 @@ MACHINE_CONFIG_START(fidel68k_state::fdes2265)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", M68000, 16_MHz_XTAL) // MC68HC000P12F
MCFG_DEVICE_PROGRAM_MAP(fdes2265_map)
timer_device &irq_on(TIMER(config, "irq_on"));
irq_on.configure_periodic(FUNC(fidel68k_state::irq_on), attotime::from_hz(597)); // from 555 timer, measured
irq_on.set_start_delay(attotime::from_hz(597) - attotime::from_nsec(6000)); // active for 6us
TIMER(config, "irq_off").configure_periodic(FUNC(fidel68k_state::irq_off), attotime::from_hz(597));
const attotime irq_period = attotime::from_hz(597); // from 555 timer, measured
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel68k_state::irq_on<M68K_IRQ_4>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(6000)); // active for 6us
TIMER(config, "irq_off").configure_periodic(FUNC(fidel68k_state::irq_off<M68K_IRQ_4>), irq_period);
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
config.set_default_layout(layout_fidel_desdis_68kr);
@ -634,10 +642,11 @@ MACHINE_CONFIG_START(fidel68k_state::eag_base)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", M68000, 16_MHz_XTAL)
MCFG_DEVICE_PROGRAM_MAP(eag_map)
timer_device &irq_on(TIMER(config, "irq_on"));
irq_on.configure_periodic(FUNC(fidel68k_state::irq_on), attotime::from_hz(4.9152_MHz_XTAL/0x2000)); // 600Hz
irq_on.set_start_delay(attotime::from_hz(4.9152_MHz_XTAL/0x2000) - attotime::from_nsec(8250)); // active for 8.25us
TIMER(config, "irq_off").configure_periodic(FUNC(fidel68k_state::irq_off), attotime::from_hz(4.9152_MHz_XTAL/0x2000));
const attotime irq_period = attotime::from_hz(4.9152_MHz_XTAL/0x2000); // 600Hz
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel68k_state::irq_on<M68K_IRQ_2>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(8250)); // active for 8.25us
TIMER(config, "irq_off").configure_periodic(FUNC(fidel68k_state::irq_off<M68K_IRQ_2>), irq_period);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
@ -660,9 +669,19 @@ MACHINE_CONFIG_END
void fidel68k_state::eag(machine_config &config)
{
eag_base(config);
RAM(config, "ram").set_default_size("1M").set_extra_options("128K, 512K, 1M");
RAM(config, m_ram).set_default_size("1M").set_extra_options("128K, 512K, 1M");
}
MACHINE_CONFIG_START(fidel68k_state::eagv5)
eag(config);
/* basic machine hardware */
m_ram->set_default_size("128K");
MCFG_DEVICE_ADD("subcpu", M68000, 16_MHz_XTAL)
MCFG_DEVICE_PROGRAM_MAP(eagv5_slave_map)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(fidel68k_state::eagv7)
eag_base(config);
@ -763,6 +782,16 @@ ROM_START( feagv2a ) // from a V3 board
ROM_LOAD16_BYTE("elite_1.6_o.u19", 0x00001, 0x10000, CRC(904c7061) SHA1(742110576cf673321440bc81a4dae4c949b49e38) )
ROM_END
ROM_START( feagv5 )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE("master_e", 0x00000, 0x10000, CRC(e424bddc) SHA1(ff03656addfe5c47f06df2efb4602f43a9e19d96) )
ROM_LOAD16_BYTE("master_o", 0x00001, 0x10000, CRC(33a00894) SHA1(849460332b1ac10d452ca3631eb99f5597511b73) )
ROM_REGION( 0x10000, "subcpu", 0 )
ROM_LOAD16_BYTE("slave_e", 0x00000, 0x08000, CRC(eea4de52) SHA1(a64ca8a44b431e2fa7f00e44cab7e6aa2d4a9403) )
ROM_LOAD16_BYTE("slave_o", 0x00001, 0x08000, CRC(35fe2fdf) SHA1(731da12ee290bad9bc03cffe281c8cc48e555dfb) )
ROM_END
ROM_START( feagv7 )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE("eag-v7b", 0x00000, 0x10000, CRC(f2f68b63) SHA1(621e5073e9c5083ac9a9b467f3ef8aa29beac5ac) )
@ -815,6 +844,7 @@ CONS( 1991, fdes2325, fdes2265, 0, fdes2325, fdes68k, fidel68k_state, empty_init
CONS( 1989, feagv2, 0, 0, eag, eag, fidel68k_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, feagv2a, feagv2, 0, eag, eag, fidel68k_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, feagv5, feagv2, 0, eagv5, eag, fidel68k_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6114-5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING )
CONS( 1990, feagv7, feagv2, 0, eagv7, eag, fidel68k_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, fidel68k_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, fidel68k_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-9)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )

View File

@ -37,8 +37,8 @@ Sensory Chess Challenger 6 (model SC6):
class fidelmcs48_state : public fidelbase_state
{
public:
fidelmcs48_state(const machine_config &mconfig, device_type type, const char *tag)
: fidelbase_state(mconfig, type, tag)
fidelmcs48_state(const machine_config &mconfig, device_type type, const char *tag) :
fidelbase_state(mconfig, type, tag)
{ }
void sc6(machine_config &config);

View File

@ -524,8 +524,7 @@ public:
m_ppi8255(*this, "ppi8255"),
m_i8243(*this, "i8243"),
m_beeper_off(*this, "beeper_off"),
m_beeper(*this, "beeper"),
m_irq_on(*this, "irq_on")
m_beeper(*this, "beeper")
{ }
void cc10(machine_config &config);
@ -550,10 +549,6 @@ private:
optional_device<i8243_device> m_i8243;
optional_device<timer_device> m_beeper_off;
optional_device<beep_device> m_beeper;
optional_device<timer_device> m_irq_on;
TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); }
TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); }
// CC10, VCC/UVC
void vcc_prepare_display();
@ -1850,7 +1845,11 @@ void fidelz80_state::vsc(machine_config &config)
Z80(config, m_maincpu, 3.9_MHz_XTAL); // 3.9MHz resonator
m_maincpu->set_addrmap(AS_PROGRAM, &fidelz80_state::vsc_map);
m_maincpu->set_addrmap(AS_IO, &fidelz80_state::vsc_io);
m_maincpu->set_periodic_int(FUNC(fidelz80_state::nmi_line_pulse), attotime::from_hz(587)); // 555 timer, measured
const attotime irq_period = attotime::from_hz(587); // 555 timer, measured
TIMER(config, m_irq_on).configure_periodic(FUNC(fidelz80_state::irq_on<INPUT_LINE_NMI>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_usec(845)); // active for 0.845ms (approx half)
TIMER(config, "irq_off").configure_periodic(FUNC(fidelz80_state::irq_off<INPUT_LINE_NMI>), irq_period);
I8255(config, m_ppi8255);
m_ppi8255->out_pa_callback().set(FUNC(fidelz80_state::vsc_ppi_porta_w));
@ -1935,9 +1934,11 @@ void fidelz80_state::dsc(machine_config &config)
/* basic machine hardware */
Z80(config, m_maincpu, 3.9_MHz_XTAL); // 3.9MHz resonator
m_maincpu->set_addrmap(AS_PROGRAM, &fidelz80_state::dsc_map);
TIMER(config, m_irq_on).configure_periodic(FUNC(fidelz80_state::irq_on), attotime::from_hz(523)); // from 555 timer (22nF, 120K, 2.7K)
m_irq_on->set_start_delay(attotime::from_hz(523) - attotime::from_usec(41)); // active for 41us
TIMER(config, "irq_off").configure_periodic(FUNC(fidelz80_state::irq_off), attotime::from_hz(523));
const attotime irq_period = attotime::from_hz(523); // from 555 timer (22nF, 120K, 2.7K)
TIMER(config, m_irq_on).configure_periodic(FUNC(fidelz80_state::irq_on<INPUT_LINE_IRQ0>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_usec(41)); // active for 41us
TIMER(config, "irq_off").configure_periodic(FUNC(fidelz80_state::irq_off<INPUT_LINE_IRQ0>), irq_period);
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
config.set_default_layout(layout_fidel_dsc);

View File

@ -97,9 +97,6 @@ private:
optional_device<hlcd0538_device> m_hlcd0538;
optional_memory_bank m_rombank;
TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); }
TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); }
// Super Constellation
DECLARE_WRITE8_MEMBER(supercon_mux_w);
DECLARE_WRITE8_MEMBER(supercon_control_w);
@ -894,10 +891,11 @@ MACHINE_CONFIG_START(novag6502_state::cforte)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", R65C02, 10_MHz_XTAL/2)
MCFG_DEVICE_PROGRAM_MAP(cforte_map)
timer_device &irq_on(TIMER(config, "irq_on"));
irq_on.configure_periodic(FUNC(novag6502_state::irq_on), attotime::from_hz(32.768_kHz_XTAL/128)); // 256Hz
irq_on.set_start_delay(attotime::from_hz(32.768_kHz_XTAL/128) - attotime::from_usec(11)); // active for 11us
TIMER(config, "irq_off").configure_periodic(FUNC(novag6502_state::irq_off), attotime::from_hz(32.768_kHz_XTAL/128));
const attotime irq_period = attotime::from_hz(32.768_kHz_XTAL/128); // 256Hz
TIMER(config, m_irq_on).configure_periodic(FUNC(novag6502_state::irq_on<M6502_IRQ_LINE>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_usec(11)); // active for 11us
TIMER(config, "irq_off").configure_periodic(FUNC(novag6502_state::irq_off<M6502_IRQ_LINE>), irq_period);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
@ -919,10 +917,11 @@ MACHINE_CONFIG_START(novag6502_state::sexpert)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", M65C02, 10_MHz_XTAL/2) // or 12_MHz_XTAL/2
MCFG_DEVICE_PROGRAM_MAP(sexpert_map)
timer_device &irq_on(TIMER(config, "irq_on"));
irq_on.configure_periodic(FUNC(novag6502_state::irq_on), attotime::from_hz(32.768_kHz_XTAL/128)); // 256Hz
irq_on.set_start_delay(attotime::from_hz(32.768_kHz_XTAL/128) - attotime::from_nsec(21500)); // active for 21.5us
TIMER(config, "irq_off").configure_periodic(FUNC(novag6502_state::irq_off), attotime::from_hz(32.768_kHz_XTAL/128));
const attotime irq_period = attotime::from_hz(32.768_kHz_XTAL/128); // 256Hz
TIMER(config, m_irq_on).configure_periodic(FUNC(novag6502_state::irq_on<M6502_IRQ_LINE>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(21500)); // active for 21.5us
TIMER(config, "irq_off").configure_periodic(FUNC(novag6502_state::irq_off<M6502_IRQ_LINE>), irq_period);
mos6551_device &acia(MOS6551(config, "acia", 0)); // R65C51P2 - RTS to CTS, DCD to GND
acia.set_xtal(1.8432_MHz_XTAL);
@ -968,7 +967,8 @@ MACHINE_CONFIG_START(novag6502_state::sforte)
/* basic machine hardware */
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(sforte_map)
subdevice<timer_device>("irq_on")->set_start_delay(attotime::from_hz(32.768_kHz_XTAL/128) - attotime::from_usec(11)); // active for ?us (assume same as cforte)
m_irq_on->set_start_delay(m_irq_on->period() - attotime::from_usec(11)); // active for ?us (assume same as cforte)
config.set_default_layout(layout_novag_sforte);
MACHINE_CONFIG_END

View File

@ -51,9 +51,6 @@ public:
void scorpio68k(machine_config &config);
private:
TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(M68K_IRQ_2, ASSERT_LINE); }
TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(M68K_IRQ_2, CLEAR_LINE); }
// Diablo 68000
DECLARE_WRITE8_MEMBER(diablo68k_control_w);
DECLARE_WRITE8_MEMBER(diablo68k_lcd_data_w);
@ -230,10 +227,11 @@ MACHINE_CONFIG_START(novag68k_state::diablo68k)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", M68000, 16_MHz_XTAL)
MCFG_DEVICE_PROGRAM_MAP(diablo68k_map)
timer_device &irq_on(TIMER(config, "irq_on"));
irq_on.configure_periodic(FUNC(novag68k_state::irq_on), attotime::from_hz(32.768_kHz_XTAL/128)); // 256Hz
irq_on.set_start_delay(attotime::from_hz(32.768_kHz_XTAL/128) - attotime::from_nsec(1100)); // active for 1.1us
TIMER(config, "irq_off").configure_periodic(FUNC(novag68k_state::irq_off), attotime::from_hz(32.768_kHz_XTAL/128));
const attotime irq_period = attotime::from_hz(32.768_kHz_XTAL/128); // 256Hz
TIMER(config, m_irq_on).configure_periodic(FUNC(novag68k_state::irq_on<M68K_IRQ_2>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(1100)); // active for 1.1us
TIMER(config, "irq_off").configure_periodic(FUNC(novag68k_state::irq_off<M68K_IRQ_2>), irq_period);
mos6551_device &acia(MOS6551(config, "acia", 0));
acia.set_xtal(1.8432_MHz_XTAL);

View File

@ -32,8 +32,8 @@ Delta-1:
class novagf8_state : public novagbase_state
{
public:
novagf8_state(const machine_config &mconfig, device_type type, const char *tag)
: novagbase_state(mconfig, type, tag)
novagf8_state(const machine_config &mconfig, device_type type, const char *tag) :
novagbase_state(mconfig, type, tag)
{ }
void delta1(machine_config &config);

View File

@ -41,8 +41,8 @@ Otherwise, it's identical to Presto. The MCU internal ROM is same too.
class novagmcs48_state : public novagbase_state
{
public:
novagmcs48_state(const machine_config &mconfig, device_type type, const char *tag)
: novagbase_state(mconfig, type, tag)
novagmcs48_state(const machine_config &mconfig, device_type type, const char *tag) :
novagbase_state(mconfig, type, tag)
{ }
void presto(machine_config &config);

View File

@ -22,9 +22,10 @@
class fidelbase_state : public driver_device
{
public:
fidelbase_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
fidelbase_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_irq_on(*this, "irq_on"),
m_inp_matrix(*this, "IN.%u", 0),
m_out_x(*this, "%u.%u", 0U, 0U),
m_out_a(*this, "%u.a", 0U),
@ -40,6 +41,7 @@ public:
// devices/pointers
required_device<cpu_device> m_maincpu;
optional_device<timer_device> m_irq_on;
optional_ioport_array<11> m_inp_matrix; // max 11
output_finder<0x20, 0x20> m_out_x;
output_finder<0x20> m_out_a;
@ -61,6 +63,9 @@ public:
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(scc_cartridge);
virtual DECLARE_READ8_MEMBER(cartridge_r);
template<int L> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(L, ASSERT_LINE); }
template<int L> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(L, CLEAR_LINE); }
// display common
int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms)
int m_display_maxy; // display matrix number of rows

View File

@ -22,8 +22,9 @@ class novagbase_state : public driver_device
public:
novagbase_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_beeper(*this, "beeper"),
m_maincpu(*this, "maincpu"),
m_irq_on(*this, "irq_on"),
m_beeper(*this, "beeper"),
m_dac(*this, "dac"),
m_lcd(*this, "hd44780"),
m_inp_matrix(*this, "IN.%u", 0),
@ -40,8 +41,9 @@ protected:
virtual void machine_reset() override;
// devices/pointers
optional_device<beep_device> m_beeper;
required_device<cpu_device> m_maincpu;
optional_device<timer_device> m_irq_on;
optional_device<beep_device> m_beeper;
optional_device<dac_bit_interface> m_dac;
optional_device<hd44780_device> m_lcd;
optional_ioport_array<9> m_inp_matrix; // max 9
@ -58,6 +60,9 @@ protected:
u16 read_inputs(int columns);
template<int L> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(L, ASSERT_LINE); }
template<int L> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(L, CLEAR_LINE); }
// display common
int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms)
int m_display_maxy; // display matrix number of rows

View File

@ -12909,6 +12909,7 @@ feagv10 //
feagv11 //
feagv2 //
feagv2a //
feagv5 //
feagv7 //
feagv7a //
feagv9 //