summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/imi7000/imi7000.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/imi7000/imi7000.h')
-rw-r--r--src/devices/bus/imi7000/imi7000.h57
1 files changed, 24 insertions, 33 deletions
diff --git a/src/devices/bus/imi7000/imi7000.h b/src/devices/bus/imi7000/imi7000.h
index 38de3341ae5..c1cf590091c 100644
--- a/src/devices/bus/imi7000/imi7000.h
+++ b/src/devices/bus/imi7000/imi7000.h
@@ -36,77 +36,68 @@ void imi7000_devices(device_slot_interface &device);
DECLARE_DEVICE_TYPE(IMI7000_BUS, imi7000_bus_device)
DECLARE_DEVICE_TYPE(IMI7000_SLOT, imi7000_slot_device)
-//**************************************************************************
-// CONSTANTS
-//**************************************************************************
-
-#define IMI7000_BUS_TAG "imi7000"
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
-class imi7000_slot_device;
class device_imi7000_interface;
-// ======================> imi7000_bus_device
+// ======================> imi7000_slot_device
-class imi7000_bus_device : public device_t
+class imi7000_slot_device : public device_t, public device_single_card_slot_interface<device_imi7000_interface>
{
public:
// construction/destruction
- imi7000_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
-
- template <typename T, typename U, typename V, typename W>
- static void add_config(machine_config &config, T &&_def_slot1, U &&_def_slot2, V &&_def_slot3, W &&_def_slot4)
+ template <typename T>
+ imi7000_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : imi7000_slot_device(mconfig, tag, owner, (uint32_t)0)
{
- IMI7000_BUS(config, IMI7000_BUS_TAG);
- IMI7000_SLOT(config, IMI7000_BUS_TAG":0", imi7000_devices, std::forward<T>(_def_slot1));
- IMI7000_SLOT(config, IMI7000_BUS_TAG":1", imi7000_devices, std::forward<U>(_def_slot2));
- IMI7000_SLOT(config, IMI7000_BUS_TAG":2", imi7000_devices, std::forward<V>(_def_slot3));
- IMI7000_SLOT(config, IMI7000_BUS_TAG":3", imi7000_devices, std::forward<W>(_def_slot4));
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
}
+ imi7000_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
// device-level overrides
virtual void device_start() override;
- imi7000_slot_device *m_unit[4];
+ device_imi7000_interface *m_card;
};
-// ======================> imi7000_slot_device
+// ======================> imi7000_bus_device
-class imi7000_slot_device : public device_t,
- public device_slot_interface
+class imi7000_bus_device : public device_t
{
public:
// construction/destruction
- template <typename T>
- imi7000_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
- : imi7000_slot_device(mconfig, tag, owner, (uint32_t)0)
+ imi7000_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+
+ template <typename T, typename U, typename V, typename W>
+ void set_slot_default_options(T &&def1, U &&def2, V &&def3, W &&def4)
{
- option_reset();
- opts(*this);
- set_default_option(dflt);
- set_fixed(false);
+ subdevice<imi7000_slot_device>(m_units[0].finder_tag())->set_default_option(std::forward<T>(def1));
+ subdevice<imi7000_slot_device>(m_units[1].finder_tag())->set_default_option(std::forward<U>(def2));
+ subdevice<imi7000_slot_device>(m_units[2].finder_tag())->set_default_option(std::forward<V>(def3));
+ subdevice<imi7000_slot_device>(m_units[3].finder_tag())->set_default_option(std::forward<W>(def4));
}
- imi7000_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
// device-level overrides
+ virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
- device_imi7000_interface *m_card;
+ required_device_array<imi7000_slot_device, 4> m_units;
};
// ======================> device_imi7000_interface
-class device_imi7000_interface : public device_slot_card_interface
+class device_imi7000_interface : public device_interface
{
friend class imi7000_slot_device;