diff options
Diffstat (limited to 'src/devices/bus/a2bus/a2bus.h')
-rw-r--r-- | src/devices/bus/a2bus/a2bus.h | 49 |
1 files changed, 11 insertions, 38 deletions
diff --git a/src/devices/bus/a2bus/a2bus.h b/src/devices/bus/a2bus/a2bus.h index 862aeca3803..502ff72e854 100644 --- a/src/devices/bus/a2bus/a2bus.h +++ b/src/devices/bus/a2bus/a2bus.h @@ -25,22 +25,6 @@ #define INH_READ 0x01 #define INH_WRITE 0x02 -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_A2BUS_CPU(_cputag) \ - downcast<a2bus_device &>(*device).set_cputag(_cputag); - -#define MCFG_A2BUS_OUT_IRQ_CB(_devcb) \ - downcast<a2bus_device &>(*device).set_out_irq_callback(DEVCB_##_devcb); - -#define MCFG_A2BUS_OUT_NMI_CB(_devcb) \ - downcast<a2bus_device &>(*device).set_out_nmi_callback(DEVCB_##_devcb); - -#define MCFG_A2BUS_OUT_INH_CB(_devcb) \ - downcast<a2bus_device &>(*device).set_out_inh_callback(DEVCB_##_devcb); - // 7M = XTAL(14'318'181) / 2 or XTAL(28'636'363) / 4 (for IIgs) static constexpr uint32_t A2BUS_7M_CLOCK = 7159090; @@ -99,15 +83,11 @@ public: a2bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // inline configuration - template <typename T> void set_cputag(T &&tag) { m_maincpu.set_tag(std::forward<T>(tag)); } - template <class Object> devcb_base &set_out_irq_callback(Object &&cb) { return m_out_irq_cb.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_out_nmi_callback(Object &&cb) { return m_out_nmi_cb.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_out_inh_callback(Object &&cb) { return m_out_inh_cb.set_callback(std::forward<Object>(cb)); } - - // devcb3 + template <typename T> void set_space(T &&tag, int spacenum) { m_maincpu_space.set_tag(std::forward<T>(tag), spacenum); } auto irq_w() { return m_out_irq_cb.bind(); } auto nmi_w() { return m_out_nmi_cb.bind(); } auto inh_w() { return m_out_inh_cb.bind(); } + auto dma_w() { return m_out_dma_cb.bind(); } void add_a2bus_card(int slot, device_a2bus_card_interface *card); device_a2bus_card_interface *get_a2bus_card(int slot); @@ -116,12 +96,10 @@ public: void set_irq_line(int state, int slot); void set_nmi_line(int state, int slot); - void set_maincpu_halt(int state); + void set_dma_line(int state); void recalc_inh(int slot); - uint8_t dma_r(address_space &space, uint16_t offset); - void dma_w(address_space &space, uint16_t offset, uint8_t data); - uint8_t dma_nospace_r(uint16_t offset); - void dma_nospace_w(uint16_t offset, uint8_t data); + uint8_t dma_r(uint16_t offset); + void dma_w(uint16_t offset, uint8_t data); DECLARE_WRITE_LINE_MEMBER( irq_w ); DECLARE_WRITE_LINE_MEMBER( nmi_w ); @@ -135,12 +113,12 @@ protected: virtual void device_reset() override; // internal state - required_device<cpu_device> m_maincpu; - address_space *m_maincpu_space; + required_address_space m_maincpu_space; devcb_write_line m_out_irq_cb; devcb_write_line m_out_nmi_cb; devcb_write8 m_out_inh_cb; + devcb_write_line m_out_dma_cb; device_a2bus_card_interface *m_device_list[8]; @@ -181,14 +159,8 @@ public: void set_a2bus(a2bus_device *a2bus, const char *slottag) { m_a2bus = a2bus; m_a2bus_slottag = slottag; } template <typename T> void set_onboard(T &&a2bus) { m_a2bus_finder.set_tag(std::forward<T>(a2bus)); m_a2bus_slottag = device().tag(); } - // pass through the original address space if any for debugger protection - // when debugging e.g. coprocessor cards (Z80 SoftCard etc). - uint8_t slot_dma_read(address_space &space, uint16_t offset) { return m_a2bus->dma_r(space, offset); } - void slot_dma_write(address_space &space, uint16_t offset, uint8_t data) { m_a2bus->dma_w(space, offset, data); } - - // these versions forego that protection for when the DMA isn't coming from a debuggable CPU device - uint8_t slot_dma_read_no_space(uint16_t offset) { return m_a2bus->dma_nospace_r(offset); } - void slot_dma_write_no_space(uint16_t offset, uint8_t data) { m_a2bus->dma_nospace_w(offset, data); } + uint8_t slot_dma_read(uint16_t offset) { return m_a2bus->dma_r(offset); } + void slot_dma_write(uint16_t offset, uint8_t data) { m_a2bus->dma_w(offset, data); } protected: uint32_t get_slotromspace() { return 0xc000 | (m_slot<<8); } // return Cn00 address for this slot @@ -199,7 +171,8 @@ protected: void raise_slot_nmi() { m_a2bus->set_nmi_line(ASSERT_LINE, m_slot); } void lower_slot_nmi() { m_a2bus->set_nmi_line(CLEAR_LINE, m_slot); } void recalc_slot_inh() { m_a2bus->recalc_inh(m_slot); } - void set_maincpu_halt(int state) { m_a2bus->set_maincpu_halt(state); } + void raise_slot_dma() { m_a2bus->set_dma_line(ASSERT_LINE); } + void lower_slot_dma() { m_a2bus->set_dma_line(CLEAR_LINE); } device_a2bus_card_interface(const machine_config &mconfig, device_t &device); |