summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/econet/econet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/econet/econet.cpp')
-rw-r--r--src/devices/bus/econet/econet.cpp74
1 files changed, 27 insertions, 47 deletions
diff --git a/src/devices/bus/econet/econet.cpp b/src/devices/bus/econet/econet.cpp
index c027614f317..5571dd3a505 100644
--- a/src/devices/bus/econet/econet.cpp
+++ b/src/devices/bus/econet/econet.cpp
@@ -40,7 +40,7 @@ DEFINE_DEVICE_TYPE(ECONET_SLOT, econet_slot_device, "econet_slot", "Econet stati
//-------------------------------------------------
device_econet_interface::device_econet_interface(const machine_config &mconfig, device_t &device) :
- device_slot_card_interface(mconfig, device), m_econet(nullptr), m_address(0), m_next(nullptr)
+ device_interface(device, "econet"), m_econet(nullptr), m_address(0)
{
}
@@ -56,8 +56,9 @@ device_econet_interface::device_econet_interface(const machine_config &mconfig,
econet_slot_device::econet_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, ECONET_SLOT, tag, owner, clock),
- device_slot_interface(mconfig, *this),
- m_address(0), m_econet(*this, finder_base::DUMMY_TAG)
+ device_single_card_slot_interface<device_econet_interface>(mconfig, *this),
+ m_address(0),
+ m_econet(*this, finder_base::DUMMY_TAG)
{
}
@@ -68,8 +69,9 @@ econet_slot_device::econet_slot_device(const machine_config &mconfig, const char
void econet_slot_device::device_start()
{
- device_econet_interface *dev = dynamic_cast<device_econet_interface *>(get_card_device());
- if (dev) m_econet->add_device(get_card_device(), m_address);
+ device_econet_interface *dev = get_card_device();
+ if (dev)
+ m_econet->add_device(*dev, m_address);
}
@@ -97,21 +99,17 @@ inline void econet_device::set_signal(device_t *device, int signal, int state)
}
else
{
- daisy_entry *entry = m_device_list.first();
-
- while (entry)
+ for (auto &entry : m_device_list)
{
- if (!strcmp(entry->m_device->tag(), device->tag()))
+ if (!strcmp(entry.device().tag(), device->tag()))
{
- if (entry->m_line[signal] != state)
+ if (entry.m_line[signal] != state)
{
if (LOG) logerror("Econet: '%s' %s %u\n", device->tag(), SIGNAL_NAME[signal], state);
- entry->m_line[signal] = state;
+ entry.m_line[signal] = state;
changed = true;
}
}
-
- entry = entry->next();
}
}
@@ -123,22 +121,18 @@ inline void econet_device::set_signal(device_t *device, int signal, int state)
case DATA: m_write_data(state); break;
}
- daisy_entry *entry = m_device_list.first();
-
- while (entry)
+ for (auto &entry : m_device_list)
{
switch (signal)
{
case CLK:
- entry->m_interface->econet_clk(state);
+ entry.interface().econet_clk(state);
break;
case DATA:
- entry->m_interface->econet_data(state);
+ entry.interface().econet_data(state);
break;
}
-
- entry = entry->next();
}
if (LOG) logerror("Econet: CLK %u DATA %u\n", get_signal(CLK), get_signal(DATA));
@@ -156,17 +150,13 @@ inline int econet_device::get_signal(int signal)
if (state)
{
- daisy_entry *entry = m_device_list.first();
-
- while (entry)
+ for (auto &entry : m_device_list)
{
- if (!entry->m_line[signal])
+ if (!entry.m_line[signal])
{
state = 0;
break;
}
-
- entry = entry->next();
}
}
@@ -201,9 +191,6 @@ econet_device::econet_device(const machine_config &mconfig, const char *tag, dev
void econet_device::device_start()
{
- // resolve callbacks
- m_write_clk.resolve_safe();
- m_write_data.resolve_safe();
}
@@ -213,7 +200,7 @@ void econet_device::device_start()
void econet_device::device_stop()
{
- m_device_list.reset();
+ m_device_list.clear();
}
@@ -221,14 +208,12 @@ void econet_device::device_stop()
// add_device -
//-------------------------------------------------
-void econet_device::add_device(device_t *target, int address)
+void econet_device::add_device(device_econet_interface &target, int address)
{
- auto entry = global_alloc(daisy_entry(target));
+ target.m_econet = this;
+ target.m_address = address;
- entry->m_interface->m_econet = this;
- entry->m_interface->m_address = address;
-
- m_device_list.append(*entry);
+ m_device_list.emplace_back(target);
}
@@ -236,17 +221,12 @@ void econet_device::add_device(device_t *target, int address)
// daisy_entry - constructor
//-------------------------------------------------
-econet_device::daisy_entry::daisy_entry(device_t *device) :
- m_next(nullptr),
- m_device(device),
- m_interface(nullptr)
+econet_device::daisy_entry::daisy_entry(device_econet_interface &device) :
+ m_device(&device.device()),
+ m_interface(&device)
{
- for (auto & elem : m_line)
- {
+ for (auto &elem : m_line)
elem = 1;
- }
-
- device->interface(m_interface);
}
@@ -254,7 +234,7 @@ econet_device::daisy_entry::daisy_entry(device_t *device) :
// clk_w -
//-------------------------------------------------
-WRITE_LINE_MEMBER( econet_device::host_clk_w )
+void econet_device::host_clk_w(int state)
{
set_signal(this, CLK, state);
}
@@ -264,7 +244,7 @@ WRITE_LINE_MEMBER( econet_device::host_clk_w )
// data_w -
//-------------------------------------------------
-WRITE_LINE_MEMBER( econet_device::host_data_w )
+void econet_device::host_data_w(int state)
{
set_signal(this, DATA, state);
}