diff options
Diffstat (limited to 'src/devices/bus/econet/econet.cpp')
-rw-r--r-- | src/devices/bus/econet/econet.cpp | 74 |
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); } |