diff options
Diffstat (limited to 'src/devices/bus/s100/s100.cpp')
-rw-r--r-- | src/devices/bus/s100/s100.cpp | 82 |
1 files changed, 27 insertions, 55 deletions
diff --git a/src/devices/bus/s100/s100.cpp b/src/devices/bus/s100/s100.cpp index 23333ce500f..403c0e6e5b6 100644 --- a/src/devices/bus/s100/s100.cpp +++ b/src/devices/bus/s100/s100.cpp @@ -28,19 +28,24 @@ DEFINE_DEVICE_TYPE(S100_SLOT, s100_slot_device, "s100_slot", "S100 slot") //------------------------------------------------- device_s100_card_interface::device_s100_card_interface(const machine_config &mconfig, device_t &device) : - device_slot_card_interface(mconfig, device), - m_bus(nullptr), - m_next(nullptr) + device_interface(device, "s100bus"), + m_bus(nullptr) { } +void device_s100_card_interface::interface_pre_start() +{ + if (!m_bus) + throw device_missing_dependencies(); +} + //------------------------------------------------- // s100_slot_device - constructor //------------------------------------------------- s100_slot_device::s100_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, S100_SLOT, tag, owner, clock), - device_slot_interface(mconfig, *this), + device_single_card_slot_interface<device_s100_card_interface>(mconfig, *this), m_bus(*this, DEVICE_SELF_OWNER) { } @@ -52,8 +57,9 @@ s100_slot_device::s100_slot_device(const machine_config &mconfig, const char *ta void s100_slot_device::device_start() { - device_s100_card_interface *dev = dynamic_cast<device_s100_card_interface *>(get_card_device()); - if (dev) m_bus->add_card(dev); + device_s100_card_interface *const dev = get_card_device(); + if (dev) + m_bus->add_card(*dev); } @@ -83,6 +89,10 @@ s100_bus_device::s100_bus_device(const machine_config &mconfig, const char *tag, { } +s100_bus_device::~s100_bus_device() +{ +} + //------------------------------------------------- // device_start - device-specific startup @@ -90,24 +100,6 @@ s100_bus_device::s100_bus_device(const machine_config &mconfig, const char *tag, void s100_bus_device::device_start() { - // resolve callbacks - m_write_irq.resolve_safe(); - m_write_nmi.resolve_safe(); - m_write_vi0.resolve_safe(); - m_write_vi1.resolve_safe(); - m_write_vi2.resolve_safe(); - m_write_vi3.resolve_safe(); - m_write_vi4.resolve_safe(); - m_write_vi5.resolve_safe(); - m_write_vi6.resolve_safe(); - m_write_vi7.resolve_safe(); - m_write_dma0.resolve_safe(); - m_write_dma1.resolve_safe(); - m_write_dma2.resolve_safe(); - m_write_dma3.resolve_safe(); - m_write_rdy.resolve_safe(); - m_write_hold.resolve_safe(); - m_write_error.resolve_safe(); } @@ -124,10 +116,10 @@ void s100_bus_device::device_reset() // add_card - add card //------------------------------------------------- -void s100_bus_device::add_card(device_s100_card_interface *card) +void s100_bus_device::add_card(device_s100_card_interface &card) { - card->m_bus = this; - m_device_list.append(*card); + card.m_bus = this; + m_device_list.emplace_back(card); } @@ -139,13 +131,8 @@ uint8_t s100_bus_device::smemr_r(offs_t offset) { uint8_t data = 0xff; - device_s100_card_interface *entry = m_device_list.first(); - - while (entry) - { - data &= entry->s100_smemr_r(offset); - entry = entry->next(); - } + for (device_s100_card_interface &entry : m_device_list) + data &= entry.s100_smemr_r(offset); return data; } @@ -157,13 +144,8 @@ uint8_t s100_bus_device::smemr_r(offs_t offset) void s100_bus_device::mwrt_w(offs_t offset, uint8_t data) { - device_s100_card_interface *entry = m_device_list.first(); - - while (entry) - { - entry->s100_mwrt_w(offset, data); - entry = entry->next(); - } + for (device_s100_card_interface &entry : m_device_list) + entry.s100_mwrt_w(offset, data); } @@ -175,13 +157,8 @@ uint8_t s100_bus_device::sinp_r(offs_t offset) { uint8_t data = 0xff; - device_s100_card_interface *entry = m_device_list.first(); - - while (entry) - { - data &= entry->s100_sinp_r(offset); - entry = entry->next(); - } + for (device_s100_card_interface &entry : m_device_list) + data &= entry.s100_sinp_r(offset); return data; } @@ -193,11 +170,6 @@ uint8_t s100_bus_device::sinp_r(offs_t offset) void s100_bus_device::sout_w(offs_t offset, uint8_t data) { - device_s100_card_interface *entry = m_device_list.first(); - - while (entry) - { - entry->s100_sout_w(offset, data); - entry = entry->next(); - } + for (device_s100_card_interface &entry : m_device_list) + entry.s100_sout_w(offset, data); } |