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