diff options
Diffstat (limited to 'src/devices/machine/hd63450.h')
-rw-r--r-- | src/devices/machine/hd63450.h | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/src/devices/machine/hd63450.h b/src/devices/machine/hd63450.h index 5aa17321090..8034ef784d7 100644 --- a/src/devices/machine/hd63450.h +++ b/src/devices/machine/hd63450.h @@ -43,12 +43,26 @@ public: uint16_t read(offs_t offset); void write(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - DECLARE_WRITE_LINE_MEMBER(drq0_w); - DECLARE_WRITE_LINE_MEMBER(drq1_w); - DECLARE_WRITE_LINE_MEMBER(drq2_w); - DECLARE_WRITE_LINE_MEMBER(drq3_w); + void drq0_w(int state) { drq_w(0, state); } + void drq1_w(int state) { drq_w(1, state); } + void drq2_w(int state) { drq_w(2, state); } + void drq3_w(int state) { drq_w(3, state); } + void pcl0_w(int state) { pcl_w(0, state); } + void pcl1_w(int state) { pcl_w(1, state); } + void pcl2_w(int state) { pcl_w(2, state); } + void pcl3_w(int state) { pcl_w(3, state); } uint8_t iack(); + enum { + ERR_RESET = 0, + ERR_FREE_BUS_RETRY = 3, + ERR_RETRY = 4, + ERR_BUS = 5, + ERR_HALT = 6, + ERR_NONE= 7 + }; + void bec_w(offs_t offset, uint8_t data) { m_bec = data; } + void single_transfer(int x); void set_timer(int channel, const attotime &tm); @@ -97,6 +111,7 @@ private: bool m_drq_state[4]; int8_t m_irq_channel; + uint8_t m_bec; // tell if a channel is in use bool dma_in_progress(int channel) const { return (m_reg[channel].csr & 0x08) != 0; } @@ -111,6 +126,9 @@ private: // interrupt helpers void set_irq(int channel); void clear_irq(int channel); + + void drq_w(int channel, int state); + void pcl_w(int channel, int state); }; DECLARE_DEVICE_TYPE(HD63450, hd63450_device) |