diff options
Diffstat (limited to 'src/mame/drivers/ckz80.cpp')
-rw-r--r-- | src/mame/drivers/ckz80.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/mame/drivers/ckz80.cpp b/src/mame/drivers/ckz80.cpp index 1dc3838cc80..dcbb7543bb4 100644 --- a/src/mame/drivers/ckz80.cpp +++ b/src/mame/drivers/ckz80.cpp @@ -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); |