summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/hd63450.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/hd63450.h')
-rw-r--r--src/devices/machine/hd63450.h26
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)