diff options
Diffstat (limited to 'src/devices/bus/ecbbus/ecbbus.h')
-rw-r--r-- | src/devices/bus/ecbbus/ecbbus.h | 46 |
1 files changed, 19 insertions, 27 deletions
diff --git a/src/devices/bus/ecbbus/ecbbus.h b/src/devices/bus/ecbbus/ecbbus.h index c14f1c53de4..21ee9eb2bd3 100644 --- a/src/devices/bus/ecbbus/ecbbus.h +++ b/src/devices/bus/ecbbus/ecbbus.h @@ -50,34 +50,28 @@ //************************************************************************** -// CONSTANTS +// TYPE DEFINITIONS //************************************************************************** -#define ECBBUS_TAG "ecbbus" - +class device_ecbbus_card_interface; +class ecbbus_device; -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** // ======================> ecbbus_slot_device -class ecbbus_device; - -class ecbbus_slot_device : public device_t, - public device_slot_interface +class ecbbus_slot_device : public device_t, public device_single_card_slot_interface<device_ecbbus_card_interface> { public: // construction/destruction - template <typename T> - ecbbus_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, int num, T &&opts, char const *dflt) + template <typename T, typename U> + ecbbus_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&bustag, int num, U &&opts, char const *dflt) : ecbbus_slot_device(mconfig, tag, owner, 0) { option_reset(); opts(*this); set_default_option(dflt); set_fixed(false); - set_ecbbus_slot(ECBBUS_TAG, num); + set_ecbbus_slot(std::forward<T>(bustag), num); } ecbbus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); @@ -86,13 +80,16 @@ public: virtual void device_start() override; // inline configuration - void set_ecbbus_slot(const char *tag, int num) { m_bus_tag = tag; m_bus_num = num; } + template <typename T> void set_ecbbus_slot(T &&tag, int num) + { + m_bus.set_tag(std::forward<T>(tag)); + m_bus_num = num; + } private: // configuration - const char *m_bus_tag; + required_device<ecbbus_device> m_bus; int m_bus_num; - ecbbus_device *m_bus; }; @@ -100,11 +97,6 @@ private: DECLARE_DEVICE_TYPE(ECBBUS_SLOT, ecbbus_slot_device) -// ======================> ecbbus_interface - -class device_ecbbus_card_interface; - - // ======================> ecbbus_device class ecbbus_device : public device_t @@ -116,7 +108,7 @@ public: auto irq_wr_callback() { return m_write_irq.bind(); } auto nmi_wr_callback() { return m_write_nmi.bind(); } - void add_card(device_ecbbus_card_interface *card, int pos); + void add_card(device_ecbbus_card_interface &card, int pos); DECLARE_READ8_MEMBER( mem_r ); DECLARE_WRITE8_MEMBER( mem_w ); @@ -148,16 +140,16 @@ DECLARE_DEVICE_TYPE(ECBBUS, ecbbus_device) // ======================> device_ecbbus_card_interface // class representing interface-specific live ecbbus card -class device_ecbbus_card_interface : public device_slot_card_interface +class device_ecbbus_card_interface : public device_interface { friend class ecbbus_device; public: // optional operation overrides - virtual uint8_t ecbbus_mem_r(offs_t offset) { return 0; }; - virtual void ecbbus_mem_w(offs_t offset, uint8_t data) { }; - virtual uint8_t ecbbus_io_r(offs_t offset) { return 0; }; - virtual void ecbbus_io_w(offs_t offset, uint8_t data) { }; + virtual uint8_t ecbbus_mem_r(offs_t offset) { return 0; } + virtual void ecbbus_mem_w(offs_t offset, uint8_t data) { } + virtual uint8_t ecbbus_io_r(offs_t offset) { return 0; } + virtual void ecbbus_io_w(offs_t offset, uint8_t data) { } protected: // construction/destruction |