diff options
Diffstat (limited to 'src/devices/machine/hd63450.h')
-rw-r--r-- | src/devices/machine/hd63450.h | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/devices/machine/hd63450.h b/src/devices/machine/hd63450.h index cf0381937bf..63e32c5a5d6 100644 --- a/src/devices/machine/hd63450.h +++ b/src/devices/machine/hd63450.h @@ -20,8 +20,8 @@ public: hd63450_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + auto irq_callback() { return m_irq_callback.bind(); } auto dma_end() { return m_dma_end.bind(); } - auto dma_error() { return m_dma_error.bind(); } template<int Ch> auto dma_read() { return m_dma_read[Ch].bind(); } template<int Ch> auto dma_write() { return m_dma_write[Ch].bind(); } @@ -47,11 +47,10 @@ public: DECLARE_WRITE_LINE_MEMBER(drq1_w); DECLARE_WRITE_LINE_MEMBER(drq2_w); DECLARE_WRITE_LINE_MEMBER(drq3_w); + uint8_t iack(); void single_transfer(int x); void set_timer(int channel, const attotime &tm); - int get_vector(int channel); - int get_error_vector(int channel); protected: // device-level overrides @@ -81,8 +80,8 @@ private: uint8_t gcr; // [3f] General Control Register (R/W) }; + devcb_write_line m_irq_callback; devcb_write8 m_dma_end; - devcb_write8 m_dma_error; devcb_read8 m_dma_read[4]; devcb_write8 m_dma_write[4]; @@ -97,6 +96,8 @@ private: required_device<cpu_device> m_cpu; bool m_drq_state[4]; + int8_t m_irq_channel; + // tell if a channel is in use bool dma_in_progress(int channel) const { return (m_reg[channel].csr & 0x08) != 0; } @@ -105,6 +106,11 @@ private: void dma_transfer_halt(int channel); void dma_transfer_continue(int channel); void dma_transfer_start(int channel); + void set_error(int channel, uint8_t code); + + // interrupt helpers + void set_irq(int channel); + void clear_irq(int channel); }; DECLARE_DEVICE_TYPE(HD63450, hd63450_device) |