summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/machine/ds75161a.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/machine/ds75161a.c')
-rw-r--r--src/emu/machine/ds75161a.c132
1 files changed, 55 insertions, 77 deletions
diff --git a/src/emu/machine/ds75161a.c b/src/emu/machine/ds75161a.c
index 50fc3321d6c..70d32d9ead6 100644
--- a/src/emu/machine/ds75161a.c
+++ b/src/emu/machine/ds75161a.c
@@ -31,6 +31,22 @@ const device_type DS75161A = &device_creator<ds75161a_device>;
ds75161a_device::ds75161a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, DS75161A, "DS75161A", tag, owner, clock, "ds75161a", __FILE__),
+ m_in_ren_cb(*this),
+ m_in_ifc_cb(*this),
+ m_in_ndac_cb(*this),
+ m_in_nrfd_cb(*this),
+ m_in_dav_cb(*this),
+ m_in_eoi_cb(*this),
+ m_in_atn_cb(*this),
+ m_in_srq_cb(*this),
+ m_out_ren_cb(*this),
+ m_out_ifc_cb(*this),
+ m_out_ndac_cb(*this),
+ m_out_nrfd_cb(*this),
+ m_out_dav_cb(*this),
+ m_out_eoi_cb(*this),
+ m_out_atn_cb(*this),
+ m_out_srq_cb(*this),
m_ren(1),
m_ifc(1),
m_ndac(1),
@@ -44,44 +60,6 @@ ds75161a_device::ds75161a_device(const machine_config &mconfig, const char *tag,
{
}
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void ds75161a_device::device_config_complete()
-{
- // inherit a copy of the static data
- const ds75161a_interface *intf = reinterpret_cast<const ds75161a_interface *>(static_config());
- if (intf != NULL)
- *static_cast<ds75161a_interface *>(this) = *intf;
-
- // or initialize to defaults if none provided
- else
- {
- memset(&m_in_ren_cb, 0, sizeof(m_in_ren_cb));
- memset(&m_in_ifc_cb, 0, sizeof(m_in_ifc_cb));
- memset(&m_in_ndac_cb, 0, sizeof(m_in_ndac_cb));
- memset(&m_in_nrfd_cb, 0, sizeof(m_in_nrfd_cb));
- memset(&m_in_dav_cb, 0, sizeof(m_in_dav_cb));
- memset(&m_in_eoi_cb, 0, sizeof(m_in_eoi_cb));
- memset(&m_in_atn_cb, 0, sizeof(m_in_atn_cb));
- memset(&m_in_srq_cb, 0, sizeof(m_in_srq_cb));
-
- memset(&m_out_ren_cb, 0, sizeof(m_out_ren_cb));
- memset(&m_out_ifc_cb, 0, sizeof(m_out_ifc_cb));
- memset(&m_out_ndac_cb, 0, sizeof(m_out_ndac_cb));
- memset(&m_out_nrfd_cb, 0, sizeof(m_out_nrfd_cb));
- memset(&m_out_dav_cb, 0, sizeof(m_out_dav_cb));
- memset(&m_out_eoi_cb, 0, sizeof(m_out_eoi_cb));
- memset(&m_out_atn_cb, 0, sizeof(m_out_atn_cb));
- memset(&m_out_srq_cb, 0, sizeof(m_out_srq_cb));
- }
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -89,23 +67,23 @@ void ds75161a_device::device_config_complete()
void ds75161a_device::device_start()
{
// resolve callbacks
- m_in_ren_func.resolve(m_in_ren_cb, *this);
- m_in_ifc_func.resolve(m_in_ifc_cb, *this);
- m_in_ndac_func.resolve(m_in_ndac_cb, *this);
- m_in_nrfd_func.resolve(m_in_nrfd_cb, *this);
- m_in_dav_func.resolve(m_in_dav_cb, *this);
- m_in_eoi_func.resolve(m_in_eoi_cb, *this);
- m_in_atn_func.resolve(m_in_atn_cb, *this);
- m_in_srq_func.resolve(m_in_srq_cb, *this);
-
- m_out_ren_func.resolve(m_out_ren_cb, *this);
- m_out_ifc_func.resolve(m_out_ifc_cb, *this);
- m_out_ndac_func.resolve(m_out_ndac_cb, *this);
- m_out_nrfd_func.resolve(m_out_nrfd_cb, *this);
- m_out_dav_func.resolve(m_out_dav_cb, *this);
- m_out_eoi_func.resolve(m_out_eoi_cb, *this);
- m_out_atn_func.resolve(m_out_atn_cb, *this);
- m_out_srq_func.resolve(m_out_srq_cb, *this);
+ m_in_ren_cb.resolve_safe(0);
+ m_in_ifc_cb.resolve_safe(0);
+ m_in_ndac_cb.resolve_safe(0);
+ m_in_nrfd_cb.resolve_safe(0);
+ m_in_dav_cb.resolve_safe(0);
+ m_in_eoi_cb.resolve_safe(0);
+ m_in_atn_cb.resolve_safe(0);
+ m_in_srq_cb.resolve_safe(0);
+
+ m_out_ren_cb.resolve_safe();
+ m_out_ifc_cb.resolve_safe();
+ m_out_ndac_cb.resolve_safe();
+ m_out_nrfd_cb.resolve_safe();
+ m_out_dav_cb.resolve_safe();
+ m_out_eoi_cb.resolve_safe();
+ m_out_atn_cb.resolve_safe();
+ m_out_srq_cb.resolve_safe();
// register for state saving
save_item(NAME(m_ren));
@@ -127,19 +105,19 @@ void ds75161a_device::device_start()
void ds75161a_device::update_signals()
{
- m_out_ren_func(m_dc ? 1 : m_ren);
- m_out_ifc_func(m_dc ? 1 : m_ifc);
- m_out_ndac_func(m_te ? 1 : m_ndac);
- m_out_nrfd_func(m_te ? 1 : m_nrfd);
- m_out_dav_func(m_te ? m_dav : 1);
- m_out_atn_func(m_dc ? 1 : m_atn);
- m_out_srq_func(m_dc ? m_srq : 1 );
-
- int atn = m_in_atn_func();
-
- if (m_te && atn) m_out_eoi_func(m_eoi);
- else if (!m_dc && !atn) m_out_eoi_func(m_eoi);
- else m_out_eoi_func(1);
+ m_out_ren_cb(m_dc ? 1 : m_ren);
+ m_out_ifc_cb(m_dc ? 1 : m_ifc);
+ m_out_ndac_cb(m_te ? 1 : m_ndac);
+ m_out_nrfd_cb(m_te ? 1 : m_nrfd);
+ m_out_dav_cb(m_te ? m_dav : 1);
+ m_out_atn_cb(m_dc ? 1 : m_atn);
+ m_out_srq_cb(m_dc ? m_srq : 1 );
+
+ int atn = m_in_atn_cb();
+
+ if (m_te && atn) m_out_eoi_cb(m_eoi);
+ else if (!m_dc && !atn) m_out_eoi_cb(m_eoi);
+ else m_out_eoi_cb(1);
}
@@ -179,7 +157,7 @@ WRITE_LINE_MEMBER( ds75161a_device::dc_w )
READ_LINE_MEMBER( ds75161a_device::ren_r )
{
- return m_dc ? m_in_ren_func() : 0;
+ return m_dc ? m_in_ren_cb() : 0;
}
@@ -189,7 +167,7 @@ READ_LINE_MEMBER( ds75161a_device::ren_r )
READ_LINE_MEMBER( ds75161a_device::ifc_r )
{
- return m_dc ? m_in_ifc_func() : 0;
+ return m_dc ? m_in_ifc_cb() : 0;
}
@@ -199,7 +177,7 @@ READ_LINE_MEMBER( ds75161a_device::ifc_r )
READ_LINE_MEMBER( ds75161a_device::ndac_r )
{
- return m_te ? m_in_ndac_func() : 0;
+ return m_te ? m_in_ndac_cb() : 0;
}
@@ -209,7 +187,7 @@ READ_LINE_MEMBER( ds75161a_device::ndac_r )
READ_LINE_MEMBER( ds75161a_device::nrfd_r )
{
- return m_te ? m_in_nrfd_func() : 0;
+ return m_te ? m_in_nrfd_cb() : 0;
}
@@ -219,7 +197,7 @@ READ_LINE_MEMBER( ds75161a_device::nrfd_r )
READ_LINE_MEMBER( ds75161a_device::dav_r )
{
- return m_te ? 0 : m_in_dav_func();
+ return m_te ? 0 : m_in_dav_cb();
}
@@ -229,8 +207,8 @@ READ_LINE_MEMBER( ds75161a_device::dav_r )
READ_LINE_MEMBER( ds75161a_device::eoi_r )
{
- int atn = m_in_atn_func();
- int eoi = m_in_eoi_func();
+ int atn = m_in_atn_cb();
+ int eoi = m_in_eoi_cb();
if (!m_te && atn) return eoi;
else if (m_dc && !atn) return eoi;
@@ -244,7 +222,7 @@ READ_LINE_MEMBER( ds75161a_device::eoi_r )
READ_LINE_MEMBER( ds75161a_device::atn_r )
{
- return m_dc ? m_in_atn_func() : 0;
+ return m_dc ? m_in_atn_cb() : 0;
}
@@ -254,7 +232,7 @@ READ_LINE_MEMBER( ds75161a_device::atn_r )
READ_LINE_MEMBER( ds75161a_device::srq_r )
{
- return m_dc ? 0 : m_in_srq_func();
+ return m_dc ? 0 : m_in_srq_cb();
}