summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/nubus
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2020-09-06 12:15:52 -0400
committer AJR <ajrhacker@users.noreply.github.com>2020-09-06 12:15:52 -0400
commit27aa4fe0750cd128c10d580c82ab95dbef960e8b (patch)
tree75d3b4c1e10019f7db119a10d81ff9d433b7c4a9 /src/devices/bus/nubus
parent61e021ef4128e8fd61b502fccc2706ae49f12ec0 (diff)
nubus: Minor cleanup to fix deprecation warnings
Diffstat (limited to 'src/devices/bus/nubus')
-rw-r--r--src/devices/bus/nubus/nubus.cpp31
-rw-r--r--src/devices/bus/nubus/nubus.h114
2 files changed, 83 insertions, 62 deletions
diff --git a/src/devices/bus/nubus/nubus.cpp b/src/devices/bus/nubus/nubus.cpp
index 5bb45cb95d5..edbf53fab05 100644
--- a/src/devices/bus/nubus/nubus.cpp
+++ b/src/devices/bus/nubus/nubus.cpp
@@ -32,21 +32,31 @@ nubus_slot_device::nubus_slot_device(const machine_config &mconfig, const char *
nubus_slot_device::nubus_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, type, tag, owner, clock),
- device_slot_interface(mconfig, *this),
- m_nubus_tag(nullptr),
+ device_single_card_slot_interface(mconfig, *this),
+ m_nubus(*this, finder_base::DUMMY_TAG),
m_nubus_slottag(nullptr)
{
}
//-------------------------------------------------
+// device_resolve_objects - resolve objects that
+// may be needed for other devices to set
+// initial conditions at start time
+//-------------------------------------------------
+
+void nubus_slot_device::device_resolve_objects()
+{
+ device_nubus_card_interface *dev = get_card_device();
+
+ if (dev) dev->set_nubus_tag(m_nubus.target(), m_nubus_slottag);
+}
+
+//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void nubus_slot_device::device_start()
{
- device_nubus_card_interface *dev = dynamic_cast<device_nubus_card_interface *>(get_card_device());
-
- if (dev) dev->set_nubus_tag(m_nubus_tag, m_nubus_slottag);
}
//**************************************************************************
@@ -215,7 +225,7 @@ WRITE_LINE_MEMBER( nubus_device::irqe_w ) { m_out_irqe_cb(state); }
device_nubus_card_interface::device_nubus_card_interface(const machine_config &mconfig, device_t &device)
: device_interface(device, "nubus"),
m_nubus(nullptr),
- m_nubus_tag(nullptr), m_nubus_slottag(nullptr), m_slot(0), m_next(nullptr)
+ m_nubus_slottag(nullptr), m_slot(0), m_next(nullptr)
{
}
@@ -260,16 +270,9 @@ void device_nubus_card_interface::interface_pre_start()
fatalerror("Slot %x out of range for Apple NuBus\n", m_slot);
}
- device_t *const bus = device().machine().device(m_nubus_tag);
- if (!bus)
- {
- fatalerror("Can't find NuBus device %s\n", m_nubus_tag);
- }
-
- m_nubus = dynamic_cast<nubus_device *>(bus);
if (!m_nubus)
{
- fatalerror("Device %s (%s) is not an instance of nubus_device\n", bus->tag(), bus->name());
+ fatalerror("Can't find NuBus device\n");
}
nubus().add_nubus_card(this);
diff --git a/src/devices/bus/nubus/nubus.h b/src/devices/bus/nubus/nubus.h
index bd5bf51c64a..2fc5f048e67 100644
--- a/src/devices/bus/nubus/nubus.h
+++ b/src/devices/bus/nubus/nubus.h
@@ -20,32 +20,83 @@
class nubus_device;
-class nubus_slot_device : public device_t, public device_slot_interface
+// ======================> device_nubus_card_interface
+
+// class representing interface-specific live nubus card
+class device_nubus_card_interface : public device_interface
{
+ friend class nubus_device;
+ template <class ElementType> friend class simple_list;
public:
// construction/destruction
- template <typename T>
- nubus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, const char *nbtag, T &&opts, const char *dflt)
+ virtual ~device_nubus_card_interface();
+
+ device_nubus_card_interface *next() const { return m_next; }
+
+ void set_nubus_device();
+
+ // helper functions for card devices
+ void install_declaration_rom(device_t *dev, const char *romregion, bool mirror_all_mb = false, bool reverse_rom = false);
+ void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data);
+
+ uint32_t get_slotspace() { return 0xf0000000 | (m_slot<<24); }
+ uint32_t get_super_slotspace() { return m_slot<<28; }
+
+ void raise_slot_irq();
+ void lower_slot_irq();
+
+ // inline configuration
+ void set_nubus_tag(nubus_device *nubus, const char *slottag) { m_nubus = nubus; m_nubus_slottag = slottag; }
+
+protected:
+ device_nubus_card_interface(const machine_config &mconfig, device_t &device);
+ virtual void interface_pre_start() override;
+
+ int slotno() const { assert(m_nubus); return m_slot; }
+ nubus_device &nubus() { assert(m_nubus); return *m_nubus; }
+
+private:
+ nubus_device *m_nubus;
+ const char *m_nubus_slottag;
+ int m_slot;
+ std::vector<uint8_t> m_declaration_rom;
+ device_nubus_card_interface *m_next;
+};
+
+class nubus_slot_device : public device_t, public device_single_card_slot_interface<device_nubus_card_interface>
+{
+public:
+ // construction/destruction
+ template <typename T, typename U>
+ nubus_slot_device(const machine_config &mconfig, T &&tag, device_t *owner, const char *nbtag, U &&opts, const char *dflt)
: nubus_slot_device(mconfig, tag, owner, (uint32_t)0)
{
option_reset();
opts(*this);
set_default_option(dflt);
- set_nubus_slot(nbtag, tag);
+ set_nubus_slot(std::forward<T>(nbtag), tag);
}
nubus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// inline configuration
- void set_nubus_slot(const char *tag, const char *slottag) { m_nubus_tag = tag; m_nubus_slottag = slottag; }
+ template <typename T>
+ void set_nubus_slot(T &&tag, const char *slottag)
+ {
+ m_nubus.set_tag(std::forward<T>(tag));
+ m_nubus_slottag = slottag;
+ }
+
protected:
nubus_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
+ virtual void device_resolve_objects() override;
virtual void device_start() override;
// configuration
- const char *m_nubus_tag, *m_nubus_slottag;
+ required_device<nubus_device> m_nubus;
+ const char *m_nubus_slottag;
};
// device type definition
@@ -104,51 +155,18 @@ protected:
simple_list<device_nubus_card_interface> m_device_list;
};
-
-// device type definition
-DECLARE_DEVICE_TYPE(NUBUS, nubus_device)
-
-// ======================> device_nubus_card_interface
-
-// class representing interface-specific live nubus card
-class device_nubus_card_interface : public device_interface
+inline void device_nubus_card_interface::raise_slot_irq()
{
- friend class nubus_device;
- template <class ElementType> friend class simple_list;
-public:
- // construction/destruction
- virtual ~device_nubus_card_interface();
-
- device_nubus_card_interface *next() const { return m_next; }
-
- void set_nubus_device();
-
- // helper functions for card devices
- void install_declaration_rom(device_t *dev, const char *romregion, bool mirror_all_mb = false, bool reverse_rom = false);
- void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data);
-
- uint32_t get_slotspace() { return 0xf0000000 | (m_slot<<24); }
- uint32_t get_super_slotspace() { return m_slot<<28; }
-
- void raise_slot_irq() { nubus().set_irq_line(m_slot, ASSERT_LINE); }
- void lower_slot_irq() { nubus().set_irq_line(m_slot, CLEAR_LINE); }
+ nubus().set_irq_line(m_slot, ASSERT_LINE);
+}
- // inline configuration
- void set_nubus_tag(const char *tag, const char *slottag) { m_nubus_tag = tag; m_nubus_slottag = slottag; }
-
-protected:
- device_nubus_card_interface(const machine_config &mconfig, device_t &device);
- virtual void interface_pre_start() override;
+inline void device_nubus_card_interface::lower_slot_irq()
+{
+ nubus().set_irq_line(m_slot, CLEAR_LINE);
+}
- int slotno() const { assert(m_nubus); return m_slot; }
- nubus_device &nubus() { assert(m_nubus); return *m_nubus; }
-private:
- nubus_device *m_nubus;
- const char *m_nubus_tag, *m_nubus_slottag;
- int m_slot;
- std::vector<uint8_t> m_declaration_rom;
- device_nubus_card_interface *m_next;
-};
+// device type definition
+DECLARE_DEVICE_TYPE(NUBUS, nubus_device)
#endif // MAME_BUS_NUBUS_NUBUS_H