summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/a800/a8sio.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/a800/a8sio.cpp')
-rw-r--r--src/devices/bus/a800/a8sio.cpp86
1 files changed, 24 insertions, 62 deletions
diff --git a/src/devices/bus/a800/a8sio.cpp b/src/devices/bus/a800/a8sio.cpp
index 1244662d673..45fdb47ba45 100644
--- a/src/devices/bus/a800/a8sio.cpp
+++ b/src/devices/bus/a800/a8sio.cpp
@@ -41,48 +41,7 @@
// GLOBAL VARIABLES
//**************************************************************************
-DEFINE_DEVICE_TYPE(A8SIO_SLOT, a8sio_slot_device, "a8sio_slot", "Atari 8 bit SIO Slot")
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// a8sio_slot_device - constructor
-//-------------------------------------------------
-a8sio_slot_device::a8sio_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : a8sio_slot_device(mconfig, A8SIO_SLOT, tag, owner, clock)
-{
-}
-
-a8sio_slot_device::a8sio_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
- device_t(mconfig, type, tag, owner, clock),
- device_slot_interface(mconfig, *this), m_a8sio_tag(nullptr), m_a8sio_slottag(nullptr)
-{
-}
-
-//-------------------------------------------------
-// device_start - device-specific startup
-//-------------------------------------------------
-
-void a8sio_slot_device::device_start()
-{
- device_a8sio_card_interface *dev = dynamic_cast<device_a8sio_card_interface *>(get_card_device());
-
- if (dev)
- {
- dev->set_a8sio_tag(m_a8sio_tag, m_a8sio_slottag);
- }
-}
-
-
-
-//**************************************************************************
-// GLOBAL VARIABLES
-//**************************************************************************
-
-DEFINE_DEVICE_TYPE(A8SIO, a8sio_device, "a8sio", "Atari 8 bit SIO")
-
+DEFINE_DEVICE_TYPE(A8SIO, a8sio_device, "a8sio", "Atari 8 bit SIO Slot")
//**************************************************************************
// LIVE DEVICE
@@ -93,12 +52,8 @@ DEFINE_DEVICE_TYPE(A8SIO, a8sio_device, "a8sio", "Atari 8 bit SIO")
//-------------------------------------------------
a8sio_device::a8sio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : a8sio_device(mconfig, A8SIO, tag, owner, clock)
-{
-}
-
-a8sio_device::a8sio_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, type, tag, owner, clock)
+ : device_t(mconfig, A8SIO, tag, owner, clock)
+ , device_slot_interface(mconfig, *this)
, m_out_clock_in_cb(*this)
, m_out_data_in_cb(*this)
, m_out_proceed_cb(*this)
@@ -109,20 +64,34 @@ a8sio_device::a8sio_device(const machine_config &mconfig, device_type type, cons
}
//-------------------------------------------------
-// device_start - device-specific startup
+// device_resolve_objects - resolve objects that
+// may be needed for other devices to set
+// initial conditions at start time
//-------------------------------------------------
-void a8sio_device::device_start()
+void a8sio_device::device_resolve_objects()
{
+ m_device = dynamic_cast<device_a8sio_card_interface *>(get_card_device());
+
+ if (m_device)
+ {
+ m_device->set_a8sio_device(this);
+ }
+
// resolve callbacks
m_out_clock_in_cb.resolve_safe();
m_out_data_in_cb.resolve_safe();
m_out_proceed_cb.resolve_safe();
m_out_audio_in_cb.resolve_safe();
m_out_interrupt_cb.resolve_safe();
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
- // clear slot
- m_device = nullptr;
+void a8sio_device::device_start()
+{
}
//-------------------------------------------------
@@ -135,12 +104,7 @@ void a8sio_device::device_reset()
device_a8sio_card_interface *a8sio_device::get_a8sio_card()
{
- return m_device;
-}
-
-void a8sio_device::add_a8sio_card(device_a8sio_card_interface *card)
-{
- m_device = card;
+ return m_device;
}
WRITE_LINE_MEMBER( a8sio_device::clock_in_w )
@@ -204,7 +168,6 @@ WRITE_LINE_MEMBER( a8sio_device::interrupt_w )
device_a8sio_card_interface::device_a8sio_card_interface(const machine_config &mconfig, device_t &device)
: device_slot_card_interface(mconfig, device)
, m_a8sio(nullptr)
- , m_a8sio_tag(nullptr), m_a8sio_slottag(nullptr)
{
}
@@ -217,10 +180,9 @@ device_a8sio_card_interface::~device_a8sio_card_interface()
{
}
-void device_a8sio_card_interface::set_a8sio_device()
+void device_a8sio_card_interface::set_a8sio_device(a8sio_device *sio)
{
- m_a8sio = dynamic_cast<a8sio_device *>(device().machine().device(m_a8sio_tag));
- m_a8sio->add_a8sio_card(this);
+ m_a8sio = sio;
}
WRITE_LINE_MEMBER( device_a8sio_card_interface::clock_out_w )