summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/z80ctc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/z80ctc.h')
-rw-r--r--src/devices/machine/z80ctc.h33
1 files changed, 17 insertions, 16 deletions
diff --git a/src/devices/machine/z80ctc.h b/src/devices/machine/z80ctc.h
index c70f1394acb..098915aceab 100644
--- a/src/devices/machine/z80ctc.h
+++ b/src/devices/machine/z80ctc.h
@@ -50,7 +50,7 @@ public:
z80ctc_channel_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
protected:
- // device-level overrides
+ // device_t implementation
virtual void device_start() override;
virtual void device_reset() override;
@@ -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
+ 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;
- virtual void device_resolve_objects() override;
virtual void device_start() override;
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::array<4> m_zc_cb; // 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
};