summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/am9517a.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/am9517a.h')
-rw-r--r--src/devices/machine/am9517a.h34
1 files changed, 27 insertions, 7 deletions
diff --git a/src/devices/machine/am9517a.h b/src/devices/machine/am9517a.h
index 365246f60c6..37390a930d3 100644
--- a/src/devices/machine/am9517a.h
+++ b/src/devices/machine/am9517a.h
@@ -68,6 +68,7 @@ public:
DECLARE_WRITE_LINE_MEMBER( ready_w );
DECLARE_WRITE_LINE_MEMBER( eop_w );
+ template <unsigned C> DECLARE_WRITE_LINE_MEMBER( dreq_w ) { dma_request(C, state); }
DECLARE_WRITE_LINE_MEMBER( dreq0_w );
DECLARE_WRITE_LINE_MEMBER( dreq1_w );
DECLARE_WRITE_LINE_MEMBER( dreq2_w );
@@ -83,6 +84,11 @@ protected:
virtual void end_of_process();
+ virtual void dma_read();
+ virtual void dma_write();
+
+ virtual int transfer_size(int const channel) const { return 1; }
+
int m_icount;
uint32_t m_address_mask;
@@ -110,15 +116,13 @@ protected:
uint8_t m_request;
private:
- inline void dma_request(int channel, int state);
+ void dma_request(int channel, int state);
inline bool is_request_active(int channel);
inline bool is_software_request_active(int channel);
inline void set_hreq(int state);
inline void set_dack();
inline void set_eop(int state);
inline int get_state1(bool msb_changed);
- inline void dma_read();
- inline void dma_write();
inline void dma_advance();
devcb_write_line m_out_hreq_cb;
@@ -133,11 +137,17 @@ private:
};
-class upd71071_v53_device : public am9517a_device
+class v5x_dmau_device : public am9517a_device
{
public:
// construction/destruction
- upd71071_v53_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ v5x_dmau_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ auto in_mem16r_callback() { return m_in_mem16r_cb.bind(); }
+ auto out_mem16w_callback() { return m_out_mem16w_cb.bind(); }
+
+ template <unsigned C> auto in_io16r_callback() { return m_in_io16r_cb[C].bind(); }
+ template <unsigned C> auto out_io16w_callback() { return m_out_io16w_cb[C].bind(); }
virtual DECLARE_READ8_MEMBER( read ) override;
virtual DECLARE_WRITE8_MEMBER( write ) override;
@@ -147,10 +157,20 @@ protected:
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void dma_read() override;
+ virtual void dma_write() override;
+
+ virtual int transfer_size(int const channel) const override { return (m_channel[channel].m_mode & 0x1) ? 2 : 1; }
+
+ // 16 bit transfer callbacks
+ devcb_read16 m_in_mem16r_cb;
+ devcb_write16 m_out_mem16w_cb;
+ devcb_read16 m_in_io16r_cb[4];
+ devcb_write16 m_out_io16w_cb[4];
+
int m_selected_channel;
int m_base;
uint8_t m_command_high;
-
};
@@ -170,7 +190,7 @@ protected:
// device type definition
DECLARE_DEVICE_TYPE(AM9517A, am9517a_device)
-DECLARE_DEVICE_TYPE(V53_DMAU, upd71071_v53_device)
+DECLARE_DEVICE_TYPE(V5X_DMAU, v5x_dmau_device)
DECLARE_DEVICE_TYPE(PCXPORT_DMAC, pcxport_dmac_device)
#endif // MAME_MACHINE_AM9517_H