diff options
Diffstat (limited to 'src/devices/bus/rc2014/rc2014.cpp')
-rw-r--r-- | src/devices/bus/rc2014/rc2014.cpp | 159 |
1 files changed, 123 insertions, 36 deletions
diff --git a/src/devices/bus/rc2014/rc2014.cpp b/src/devices/bus/rc2014/rc2014.cpp index e23af856311..baee04e8e37 100644 --- a/src/devices/bus/rc2014/rc2014.cpp +++ b/src/devices/bus/rc2014/rc2014.cpp @@ -20,14 +20,6 @@ rc2014_bus_device::rc2014_bus_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock) , m_installer{} - , m_clk(*this) - , m_int(*this) - , m_tx(*this) - , m_rx(*this) - , m_user1(*this) - , m_user2(*this) - , m_user3(*this) - , m_user4(*this) , m_daisy_chain{} { } @@ -54,6 +46,12 @@ void rc2014_bus_device::device_reset() installer(AS_IO)->unmap_readwrite(0, (1 << installer(AS_IO)->space_config().addr_width()) - 1); } +void rc2014_bus_device::add_card(device_rc2014_card_interface &card) +{ + card.m_bus = this; + m_device_list.emplace_back(card); +} + void rc2014_bus_device::set_bus_clock(u32 clock) { set_clock(clock); @@ -87,6 +85,54 @@ const z80_daisy_config* rc2014_bus_device::get_daisy_chain() return (const z80_daisy_config*)m_daisy_chain; } +void rc2014_bus_device::clk_w(int state) +{ + for (device_rc2014_card_interface &entry : m_device_list) + entry.card_clk_w(state); +} + +void rc2014_bus_device::int_w(int state) +{ + for (device_rc2014_card_interface &entry : m_device_list) + entry.card_int_w(state); +} + +void rc2014_bus_device::tx_w(int state) +{ + for (device_rc2014_card_interface &entry : m_device_list) + entry.card_tx_w(state); +} + +void rc2014_bus_device::rx_w(int state) +{ + for (device_rc2014_card_interface &entry : m_device_list) + entry.card_rx_w(state); +} + +void rc2014_bus_device::user1_w(int state) +{ + for (device_rc2014_card_interface &entry : m_device_list) + entry.card_user1_w(state); +} + +void rc2014_bus_device::user2_w(int state) +{ + for (device_rc2014_card_interface &entry : m_device_list) + entry.card_user2_w(state); +} + +void rc2014_bus_device::user3_w(int state) +{ + for (device_rc2014_card_interface &entry : m_device_list) + entry.card_user3_w(state); +} + +void rc2014_bus_device::user4_w(int state) +{ + for (device_rc2014_card_interface &entry : m_device_list) + entry.card_user4_w(state); +} + //------------------------------------------------- // device_rc2014_card_interface //------------------------------------------------- @@ -97,11 +143,6 @@ device_rc2014_card_interface::device_rc2014_card_interface(const machine_config { } -void device_rc2014_card_interface::set_bus_device(rc2014_bus_device *bus_device) -{ - m_bus = bus_device; -} - //------------------------------------------------- // rc2014_slot_device //------------------------------------------------- @@ -127,7 +168,7 @@ void rc2014_slot_device::device_resolve_objects() device_rc2014_card_interface *const card(dynamic_cast<device_rc2014_card_interface *>(get_card_device())); if (card) - card->set_bus_device(m_bus); + m_bus->add_card(*card); } //************************************************************************** @@ -145,18 +186,15 @@ rc2014_ext_bus_device::rc2014_ext_bus_device(const machine_config &mconfig, cons rc2014_ext_bus_device::rc2014_ext_bus_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : rc2014_bus_device(mconfig, type, tag, owner, clock) - , m_clk2(*this) - , m_page(*this) - , m_nmi(*this) - , m_tx2(*this) - , m_rx2(*this) - , m_user5(*this) - , m_user6(*this) - , m_user7(*this) - , m_user8(*this) { } +void rc2014_ext_bus_device::add_card(device_rc2014_ext_card_interface &card) +{ + card.m_bus = this; + m_device_list.emplace_back(card); +} + //------------------------------------------------- // device_rc2014_ext_card_interface //------------------------------------------------- @@ -166,12 +204,6 @@ device_rc2014_ext_card_interface::device_rc2014_ext_card_interface(const machine , m_bus(nullptr) { } - -void device_rc2014_ext_card_interface::set_bus_device(rc2014_ext_bus_device *bus_device) -{ - m_bus = bus_device; -} - //------------------------------------------------- // rc2014_ext_slot_device //------------------------------------------------- @@ -190,13 +222,67 @@ void rc2014_ext_slot_device::device_start() { } +void rc2014_ext_bus_device::clk2_w(int state) +{ + for (device_rc2014_ext_card_interface &entry : m_device_list) + entry.card_clk2_w(state); +} + +void rc2014_ext_bus_device::page_w(int state) +{ + for (device_rc2014_ext_card_interface &entry : m_device_list) + entry.card_page_w(state); +} + +void rc2014_ext_bus_device::nmi_w(int state) +{ + for (device_rc2014_ext_card_interface &entry : m_device_list) + entry.card_nmi_w(state); +} + +void rc2014_ext_bus_device::tx2_w(int state) +{ + for (device_rc2014_ext_card_interface &entry : m_device_list) + entry.card_tx2_w(state); +} + +void rc2014_ext_bus_device::rx2_w(int state) +{ + for (device_rc2014_ext_card_interface &entry : m_device_list) + entry.card_rx2_w(state); +} + +void rc2014_ext_bus_device::user5_w(int state) +{ + for (device_rc2014_ext_card_interface &entry : m_device_list) + entry.card_user5_w(state); +} + +void rc2014_ext_bus_device::user6_w(int state) +{ + for (device_rc2014_ext_card_interface &entry : m_device_list) + entry.card_user6_w(state); +} + +void rc2014_ext_bus_device::user7_w(int state) +{ + for (device_rc2014_ext_card_interface &entry : m_device_list) + entry.card_user7_w(state); +} + +void rc2014_ext_bus_device::user8_w(int state) +{ + for (device_rc2014_ext_card_interface &entry : m_device_list) + entry.card_user8_w(state); +} + void rc2014_ext_slot_device::device_resolve_objects() { rc2014_slot_device::device_resolve_objects(); device_rc2014_ext_card_interface *const card(dynamic_cast<device_rc2014_ext_card_interface *>(get_card_device())); if (card) - card->set_bus_device(dynamic_cast<rc2014_ext_bus_device *>(m_bus.target())); + ((rc2014_ext_bus_device*)m_bus.lookup())->add_card(*card); } //************************************************************************** @@ -223,6 +309,12 @@ void rc2014_rc80_bus_device::device_start() rc2014_ext_bus_device::device_start(); } +void rc2014_rc80_bus_device::add_card(device_rc2014_rc80_card_interface &card) +{ + card.m_bus = this; + m_device_list.emplace_back(card); +} + //------------------------------------------------- // device_rc2014_rc80_card_interface //------------------------------------------------- @@ -233,11 +325,6 @@ device_rc2014_rc80_card_interface::device_rc2014_rc80_card_interface(const machi { } -void device_rc2014_rc80_card_interface::set_bus_device(rc2014_rc80_bus_device *bus_device) -{ - m_bus = bus_device; -} - //------------------------------------------------- // rc2014_rc80_slot_device //------------------------------------------------- @@ -257,7 +344,7 @@ void rc2014_rc80_slot_device::device_resolve_objects() device_rc2014_rc80_card_interface *const card(dynamic_cast<device_rc2014_rc80_card_interface *>(get_card_device())); if (card) - card->set_bus_device(dynamic_cast<rc2014_rc80_bus_device *>(m_bus.target())); + ((rc2014_rc80_bus_device*)m_bus.lookup())->add_card(*card); } //************************************************************************** |