diff options
Diffstat (limited to 'src/devices/bus/tiki100/exp.cpp')
-rw-r--r-- | src/devices/bus/tiki100/exp.cpp | 91 |
1 files changed, 34 insertions, 57 deletions
diff --git a/src/devices/bus/tiki100/exp.cpp b/src/devices/bus/tiki100/exp.cpp index 2d3dfc22031..a78b143146d 100644 --- a/src/devices/bus/tiki100/exp.cpp +++ b/src/devices/bus/tiki100/exp.cpp @@ -29,9 +29,9 @@ DEFINE_DEVICE_TYPE(TIKI100_BUS_SLOT, tiki100_bus_slot_device, "tiki100bus_slot", tiki100_bus_slot_device::tiki100_bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, TIKI100_BUS_SLOT, tag, owner, clock), - device_slot_interface(mconfig, *this), + device_single_card_slot_interface<device_tiki100bus_card_interface>(mconfig, *this), device_z80daisy_interface(mconfig, *this), - m_bus(nullptr), + m_bus(*this, finder_base::DUMMY_TAG), m_card(nullptr) { } @@ -43,13 +43,9 @@ tiki100_bus_slot_device::tiki100_bus_slot_device(const machine_config &mconfig, void tiki100_bus_slot_device::device_start() { - m_bus = machine().device<tiki100_bus_device>(TIKI100_BUS_TAG); - device_tiki100bus_card_interface *dev = dynamic_cast<device_tiki100bus_card_interface *>(get_card_device()); - if (dev) - { - m_bus->add_card(dev); - m_card = dev; - } + m_card = get_card_device(); + if (m_card) + m_bus->add_card(*m_card); } @@ -62,11 +58,15 @@ tiki100_bus_device::tiki100_bus_device(const machine_config &mconfig, const char m_irq_cb(*this), m_nmi_cb(*this), m_busrq_cb(*this), - m_in_mrq_cb(*this), + m_in_mrq_cb(*this, 0), m_out_mrq_cb(*this) { } +tiki100_bus_device::~tiki100_bus_device() +{ +} + //------------------------------------------------- // device_start - device-specific startup @@ -74,12 +74,6 @@ tiki100_bus_device::tiki100_bus_device(const machine_config &mconfig, const char void tiki100_bus_device::device_start() { - // resolve callbacks - m_irq_cb.resolve_safe(); - m_nmi_cb.resolve_safe(); - m_busrq_cb.resolve_safe(); - m_in_mrq_cb.resolve(); - m_out_mrq_cb.resolve(); } @@ -87,11 +81,11 @@ void tiki100_bus_device::device_start() // add_card - add card //------------------------------------------------- -void tiki100_bus_device::add_card(device_tiki100bus_card_interface *card) +void tiki100_bus_device::add_card(device_tiki100bus_card_interface &card) { - m_device_list.append(*card); + m_device_list.emplace_back(card); - card->m_bus = this; + card.m_bus = this; } @@ -101,13 +95,8 @@ void tiki100_bus_device::add_card(device_tiki100bus_card_interface *card) uint8_t tiki100_bus_device::mrq_r(offs_t offset, uint8_t data, bool &mdis) { - device_tiki100bus_card_interface *entry = m_device_list.first(); - - while (entry) - { - data &= entry->mrq_r(offset, data, mdis); - entry = entry->next(); - } + for (device_tiki100bus_card_interface &entry : m_device_list) + data &= entry.mrq_r(offset, data, mdis); return data; } @@ -119,13 +108,8 @@ uint8_t tiki100_bus_device::mrq_r(offs_t offset, uint8_t data, bool &mdis) void tiki100_bus_device::mrq_w(offs_t offset, uint8_t data) { - device_tiki100bus_card_interface *entry = m_device_list.first(); - - while (entry) - { - entry->mrq_w(offset, data); - entry = entry->next(); - } + for (device_tiki100bus_card_interface &entry : m_device_list) + entry.mrq_w(offset, data); } @@ -135,13 +119,8 @@ void tiki100_bus_device::mrq_w(offs_t offset, uint8_t data) uint8_t tiki100_bus_device::iorq_r(offs_t offset, uint8_t data) { - device_tiki100bus_card_interface *entry = m_device_list.first(); - - while (entry) - { - data &= entry->iorq_r(offset, data); - entry = entry->next(); - } + for (device_tiki100bus_card_interface &entry : m_device_list) + data &= entry.iorq_r(offset, data); return data; } @@ -153,13 +132,8 @@ uint8_t tiki100_bus_device::iorq_r(offs_t offset, uint8_t data) void tiki100_bus_device::iorq_w(offs_t offset, uint8_t data) { - device_tiki100bus_card_interface *entry = m_device_list.first(); - - while (entry) - { - entry->iorq_w(offset, data); - entry = entry->next(); - } + for (device_tiki100bus_card_interface &entry : m_device_list) + entry.iorq_w(offset, data); } @@ -167,15 +141,10 @@ void tiki100_bus_device::iorq_w(offs_t offset, uint8_t data) // busak_w - bus acknowledge write //------------------------------------------------- -WRITE_LINE_MEMBER( tiki100_bus_device::busak_w ) +void tiki100_bus_device::busak_w(int state) { - device_tiki100bus_card_interface *entry = m_device_list.first(); - - while (entry) - { - entry->busak_w(state); - entry = entry->next(); - } + for (device_tiki100bus_card_interface &entry : m_device_list) + entry.busak_w(state); } @@ -189,13 +158,21 @@ WRITE_LINE_MEMBER( tiki100_bus_device::busak_w ) //------------------------------------------------- device_tiki100bus_card_interface::device_tiki100bus_card_interface(const machine_config &mconfig, device_t &device) : - device_slot_card_interface(mconfig, device), m_bus(nullptr), - m_busak(CLEAR_LINE), m_next(nullptr) + device_interface(device, "tiki100bus"), + m_bus(nullptr), + m_busak(CLEAR_LINE) { m_slot = dynamic_cast<tiki100_bus_slot_device *>(device.owner()); } +void device_tiki100bus_card_interface::interface_pre_start() +{ + if (!m_bus) + throw device_missing_dependencies(); +} + + //------------------------------------------------- // SLOT_INTERFACE( tiki100_cards ) //------------------------------------------------- |