summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/s100/s100.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/s100/s100.cpp')
-rw-r--r--src/devices/bus/s100/s100.cpp82
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);
}