diff options
Diffstat (limited to 'src/devices/machine/z80ctc.h')
-rw-r--r-- | src/devices/machine/z80ctc.h | 41 |
1 files changed, 21 insertions, 20 deletions
diff --git a/src/devices/machine/z80ctc.h b/src/devices/machine/z80ctc.h index 98dd852ddd2..0af27a0211c 100644 --- a/src/devices/machine/z80ctc.h +++ b/src/devices/machine/z80ctc.h @@ -50,9 +50,9 @@ public: z80ctc_channel_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0); protected: - // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + // device_t implementation + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; u8 read(); void write(u8 data); @@ -60,6 +60,7 @@ protected: attotime period() const; void trigger(bool state); TIMER_CALLBACK_MEMBER(timer_callback); + TIMER_CALLBACK_MEMBER(zc_to_callback); required_device<z80ctc_device> m_device; // pointer back to our device int m_index; // our channel index @@ -69,6 +70,7 @@ protected: bool m_extclk; // current signal from the external clock emu_timer * m_timer; // array of active timers u8 m_int_state; // interrupt status (for daisy chain) + emu_timer * m_zc_to_timer; // zc to pulse timer }; // ======================> z80ctc_device @@ -90,39 +92,38 @@ public: // read/write handlers uint8_t read(offs_t offset); void write(offs_t offset, uint8_t data); - DECLARE_WRITE_LINE_MEMBER( trg0 ); - DECLARE_WRITE_LINE_MEMBER( trg1 ); - DECLARE_WRITE_LINE_MEMBER( trg2 ); - DECLARE_WRITE_LINE_MEMBER( trg3 ); + void trg0(int state); + void trg1(int state); + void trg2(int state); + void trg3(int state); u16 get_channel_constant(int ch) const { return m_channel[ch]->m_tconst; } protected: - // device-level overrides - virtual void device_add_mconfig(machine_config &config) override; - virtual void device_resolve_objects() override; - virtual void device_start() override; + z80ctc_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); + + // device_t implementation + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual void device_start() override ATTR_COLD; virtual void device_reset_after_children() override; - // z80daisy_interface overrides + // z80daisy_interface implementation virtual int z80daisy_irq_state() override; virtual int z80daisy_irq_ack() override; virtual void z80daisy_irq_reti() override; -private: // internal helpers + u8 channel_int_state(int ch) const noexcept { return m_channel[ch]->m_int_state; } void interrupt_check(); - z80ctc_channel_device &channel_config(int ch) { return *subdevice<z80ctc_channel_device>(m_channel[ch].finder_tag()); } + z80ctc_channel_device &channel_config(int ch) { return *m_channel[ch].lookup(); } // internal state - devcb_write_line m_intr_cb; // interrupt callback - devcb_write_line m_zc_cb[4]; // zero crossing/timer output callbacks - - u8 m_vector; // interrupt vector + required_device_array<z80ctc_channel_device, 4> m_channel; // subdevice for each channel + devcb_write_line m_intr_cb; // interrupt callback + devcb_write_line::array<4> m_zc_cb; // zero crossing/timer output callbacks - // subdevice for each channel - required_device_array<z80ctc_channel_device, 4> m_channel; + u8 m_vector; // interrupt vector }; |