diff options
Diffstat (limited to 'src/devices/bus/a2bus/a2bus.cpp')
-rw-r--r-- | src/devices/bus/a2bus/a2bus.cpp | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/devices/bus/a2bus/a2bus.cpp b/src/devices/bus/a2bus/a2bus.cpp index d70b0414b9f..6835e4ca5c3 100644 --- a/src/devices/bus/a2bus/a2bus.cpp +++ b/src/devices/bus/a2bus/a2bus.cpp @@ -307,22 +307,30 @@ device_a2bus_card_interface::~device_a2bus_card_interface() void device_a2bus_card_interface::static_set_a2bus_tag(device_t &device, const char *tag, const char *slottag) { device_a2bus_card_interface &a2bus_card = dynamic_cast<device_a2bus_card_interface &>(device); + assert(a2bus_card); a2bus_card.m_a2bus_tag = tag; a2bus_card.m_a2bus_slottag = slottag; } -void device_a2bus_card_interface::set_a2bus_device() +void device_a2bus_card_interface::interface_pre_start() { - // extract the slot number from the last digit of the slot tag - int tlen = strlen(m_a2bus_slottag); + if (!m_a2bus) + { + // extract the slot number from the last digit of the slot tag + size_t const tlen = strlen(m_a2bus_slottag); - m_slot = (m_a2bus_slottag[tlen-1] - '0'); + m_slot = (m_a2bus_slottag[tlen-1] - '0'); + if (m_slot < 0 || m_slot > 7) + fatalerror("Slot %x out of range for Apple II Bus\n", m_slot); - if (m_slot < 0 || m_slot > 7) - { - fatalerror("Slot %x out of range for Apple II Bus\n", m_slot); - } + device_t *const bus = device().machine().device(m_a2bus_tag); + if (!bus) + fatalerror("Can't find Apple II Bus device %s\n", m_a2bus_tag); - m_a2bus = dynamic_cast<a2bus_device *>(device().machine().device(m_a2bus_tag)); - m_a2bus->add_a2bus_card(m_slot, this); + m_a2bus = dynamic_cast<a2bus_device *>(bus); + if (!m_a2bus) + fatalerror("Device %s (%s) is not an instance of a2bus_device\n", bus->tag(), bus->name()); + + m_a2bus->add_a2bus_card(m_slot, this); + } } |