summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/dmv/dmvbus.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/dmv/dmvbus.h')
-rw-r--r--src/devices/bus/dmv/dmvbus.h133
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;
};