diff options
Diffstat (limited to 'src/devices/bus/dmv/dmvbus.h')
-rw-r--r-- | src/devices/bus/dmv/dmvbus.h | 133 |
1 files changed, 76 insertions, 57 deletions
diff --git a/src/devices/bus/dmv/dmvbus.h b/src/devices/bus/dmv/dmvbus.h index b6a41c5b852..24c55fdb512 100644 --- a/src/devices/bus/dmv/dmvbus.h +++ b/src/devices/bus/dmv/dmvbus.h @@ -16,47 +16,13 @@ TYPE DEFINITIONS ***************************************************************************/ -// ======================> device_dmvslot_interface - -class device_dmvslot_interface : public device_slot_card_interface -{ -public: - // construction/destruction - virtual ~device_dmvslot_interface(); - - virtual bool read(offs_t offset, uint8_t &data) { return false; } - virtual bool write(offs_t offset, uint8_t data) { return false; } - virtual void io_read(int ifsel, offs_t offset, uint8_t &data) { } - virtual void io_write(int ifsel, offs_t offset, uint8_t data) { } - - // slot 1 - virtual void ram_read(uint8_t cas, offs_t offset, uint8_t &data) { } - virtual void ram_write(uint8_t cas, offs_t offset, uint8_t data) { } - - // slot 7 and 7A - virtual bool av16bit() { return false; } - virtual void hold_w(int state) { } - virtual void switch16_w(int state) { } - virtual void timint_w(int state) { } - virtual void keyint_w(int state) { } - virtual void busint_w(int state) { } - virtual void flexint_w(int state) { } - virtual void irq2_w(int state) { } - virtual void irq2a_w(int state) { } - virtual void irq3_w(int state) { } - virtual void irq4_w(int state) { } - virtual void irq5_w(int state) { } - virtual void irq6_w(int state) { } - -protected: - device_dmvslot_interface(const machine_config &mconfig, device_t &device); -}; +class device_dmvslot_interface; // ======================> dmvcart_slot_device class dmvcart_slot_device : public device_t, - public device_slot_interface + public device_single_card_slot_interface<device_dmvslot_interface> { public: // construction/destruction @@ -80,30 +46,31 @@ public: template <typename T> void set_memspace(T &&tag, int spacenum) { m_memspace.set_tag(std::forward<T>(tag), spacenum); } template <typename T> void set_iospace(T &&tag, int spacenum) { m_iospace.set_tag(std::forward<T>(tag), spacenum); } + // reading and writing + bool read(offs_t offset, uint8_t &data); + bool write(offs_t offset, uint8_t data); + void ram_read(uint8_t cas, offs_t offset, uint8_t &data); + void ram_write(uint8_t cas, offs_t offset, uint8_t data); + void io_read(int ifsel, offs_t offset, uint8_t &data); + void io_write(int ifsel, offs_t offset, uint8_t data); + void hold_w(int state); + void switch16_w(int state); + void timint_w(int state); + void keyint_w(int state); + void busint_w(int state); + void flexint_w(int state); + void irq2_w(int state); + void irq2a_w(int state); + void irq3_w(int state); + void irq4_w(int state); + void irq5_w(int state); + void irq6_w(int state); + bool av16bit(); + +protected: // device-level overrides virtual void device_start() override; - // reading and writing - virtual bool read(offs_t offset, uint8_t &data); - virtual bool write(offs_t offset, uint8_t data); - virtual void ram_read(uint8_t cas, offs_t offset, uint8_t &data); - virtual void ram_write(uint8_t cas, offs_t offset, uint8_t data); - virtual void io_read(int ifsel, offs_t offset, uint8_t &data); - virtual void io_write(int ifsel, offs_t offset, uint8_t data); - virtual void hold_w(int state); - virtual void switch16_w(int state); - virtual void timint_w(int state); - virtual void keyint_w(int state); - virtual void busint_w(int state); - virtual void flexint_w(int state); - virtual void irq2_w(int state); - virtual void irq2a_w(int state); - virtual void irq3_w(int state); - virtual void irq4_w(int state); - virtual void irq5_w(int state); - virtual void irq6_w(int state); - virtual bool av16bit(); - // internal state devcb_read8 m_prog_read_cb; devcb_write8 m_prog_write_cb; @@ -115,6 +82,58 @@ public: required_address_space m_iospace; device_dmvslot_interface* m_cart; + + friend class device_dmvslot_interface; +}; + + +// ======================> device_dmvslot_interface + +class device_dmvslot_interface : public device_interface +{ +public: + // construction/destruction + virtual ~device_dmvslot_interface(); + + virtual bool read(offs_t offset, uint8_t &data) { return false; } + virtual bool write(offs_t offset, uint8_t data) { return false; } + virtual void io_read(int ifsel, offs_t offset, uint8_t &data) { } + virtual void io_write(int ifsel, offs_t offset, uint8_t data) { } + + // slot 1 + virtual void ram_read(uint8_t cas, offs_t offset, uint8_t &data) { } + virtual void ram_write(uint8_t cas, offs_t offset, uint8_t data) { } + + // slot 7 and 7A + virtual bool av16bit() { return false; } + virtual void hold_w(int state) { } + virtual void switch16_w(int state) { } + virtual void timint_w(int state) { } + virtual void keyint_w(int state) { } + virtual void busint_w(int state) { } + virtual void flexint_w(int state) { } + virtual void irq2_w(int state) { } + virtual void irq2a_w(int state) { } + virtual void irq3_w(int state) { } + virtual void irq4_w(int state) { } + virtual void irq5_w(int state) { } + virtual void irq6_w(int state) { } + +protected: + device_dmvslot_interface(const machine_config &mconfig, device_t &device); + + address_space &memspace() { return *m_bus->m_memspace; } + address_space &iospace() { return *m_bus->m_iospace; } + + template <typename... T> uint8_t prog_read(T &&... args) { return m_bus->m_prog_read_cb(std::forward<T>(args)...); } + template <typename... T> void prog_write(T &&... args) { m_bus->m_prog_write_cb(std::forward<T>(args)...); } + + void out_int(int state) { m_bus->m_out_int_cb(state); } + void out_irq(int state) { m_bus->m_out_irq_cb(state); } + void out_thold(int state) { m_bus->m_out_thold_cb(state); } + +private: + dmvcart_slot_device *m_bus; }; |