summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/nubus/nubus.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/nubus/nubus.cpp')
-rw-r--r--src/devices/bus/nubus/nubus.cpp31
1 files changed, 17 insertions, 14 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);