summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/machine/z80dart.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/machine/z80dart.c')
-rw-r--r--src/emu/machine/z80dart.c121
1 files changed, 39 insertions, 82 deletions
diff --git a/src/emu/machine/z80dart.c b/src/emu/machine/z80dart.c
index 8bb3c212cf8..ea3b80e9cb0 100644
--- a/src/emu/machine/z80dart.c
+++ b/src/emu/machine/z80dart.c
@@ -44,19 +44,6 @@
//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-const device_type Z80DART = z80dart_device_config::static_alloc_device_config;
-const device_type Z80SIO0 = z80dart_device_config::static_alloc_device_config; // FIXME
-const device_type Z80SIO1 = z80dart_device_config::static_alloc_device_config; // FIXME
-const device_type Z80SIO2 = z80dart_device_config::static_alloc_device_config; // FIXME
-const device_type Z80SIO3 = z80dart_device_config::static_alloc_device_config; // FIXME
-const device_type Z80SIO4 = z80dart_device_config::static_alloc_device_config; // FIXME
-
-
-
-//**************************************************************************
// CONSTANTS
//**************************************************************************
@@ -190,38 +177,27 @@ const int WR5_DTR = 0x80;
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-//-------------------------------------------------
-// z80dart_device_config - constructor
-//-------------------------------------------------
-
-z80dart_device_config::z80dart_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "Zilog Z80 DART", tag, owner, clock),
- device_config_z80daisy_interface(mconfig, *this)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *z80dart_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(z80dart_device_config(mconfig, tag, owner, clock));
-}
-
+// device type definition
+const device_type Z80DART = &device_creator<z80dart_device>;
+const device_type Z80SIO0 = &device_creator<z80dart_device>;
+const device_type Z80SIO1 = &device_creator<z80dart_device>;
+const device_type Z80SIO2 = &device_creator<z80dart_device>;
+const device_type Z80SIO3 = &device_creator<z80dart_device>;
+const device_type Z80SIO4 = &device_creator<z80dart_device>;
//-------------------------------------------------
-// alloc_device - allocate a new device object
+// z80dart_device - constructor
//-------------------------------------------------
-device_t *z80dart_device_config::alloc_device(running_machine &machine) const
+z80dart_device::z80dart_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, Z80DART, "Zilog Z80 DART", tag, owner, clock),
+ device_z80daisy_interface(mconfig, *this)
{
- return auto_alloc(machine, z80dart_device(machine, *this));
+ for (int i = 0; i < 8; i++)
+ m_int_state[i] = 0;
}
@@ -231,7 +207,7 @@ device_t *z80dart_device_config::alloc_device(running_machine &machine) const
// complete
//-------------------------------------------------
-void z80dart_device_config::device_config_complete()
+void z80dart_device::device_config_complete()
{
// inherit a copy of the static data
const z80dart_interface *intf = reinterpret_cast<const z80dart_interface *>(static_config());
@@ -242,42 +218,23 @@ void z80dart_device_config::device_config_complete()
else
{
m_rx_clock_a = m_tx_clock_a = m_rx_clock_b = m_tx_clock_b = 0;
- memset(&m_in_rxda_func, 0, sizeof(m_in_rxda_func));
- memset(&m_out_txda_func, 0, sizeof(m_out_txda_func));
- memset(&m_out_dtra_func, 0, sizeof(m_out_dtra_func));
- memset(&m_out_rtsa_func, 0, sizeof(m_out_rtsa_func));
- memset(&m_out_wrdya_func, 0, sizeof(m_out_wrdya_func));
- memset(&m_out_synca_func, 0, sizeof(m_out_synca_func));
- memset(&m_in_rxdb_func, 0, sizeof(m_in_rxdb_func));
- memset(&m_out_txdb_func, 0, sizeof(m_out_txdb_func));
- memset(&m_out_dtrb_func, 0, sizeof(m_out_dtrb_func));
- memset(&m_out_rtsb_func, 0, sizeof(m_out_rtsb_func));
- memset(&m_out_wrdyb_func, 0, sizeof(m_out_wrdyb_func));
- memset(&m_out_syncb_func, 0, sizeof(m_out_syncb_func));
- memset(&m_out_int_func, 0, sizeof(m_out_int_func));
+ memset(&m_in_rxda_cb, 0, sizeof(m_in_rxda_cb));
+ memset(&m_out_txda_cb, 0, sizeof(m_out_txda_cb));
+ memset(&m_out_dtra_cb, 0, sizeof(m_out_dtra_cb));
+ memset(&m_out_rtsa_cb, 0, sizeof(m_out_rtsa_cb));
+ memset(&m_out_wrdya_cb, 0, sizeof(m_out_wrdya_cb));
+ memset(&m_out_synca_cb, 0, sizeof(m_out_synca_cb));
+ memset(&m_in_rxdb_cb, 0, sizeof(m_in_rxdb_cb));
+ memset(&m_out_txdb_cb, 0, sizeof(m_out_txdb_cb));
+ memset(&m_out_dtrb_cb, 0, sizeof(m_out_dtrb_cb));
+ memset(&m_out_rtsb_cb, 0, sizeof(m_out_rtsb_cb));
+ memset(&m_out_wrdyb_cb, 0, sizeof(m_out_wrdyb_cb));
+ memset(&m_out_syncb_cb, 0, sizeof(m_out_syncb_cb));
+ memset(&m_out_int_cb, 0, sizeof(m_out_int_cb));
}
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// z80dart_device - constructor
-//-------------------------------------------------
-
-z80dart_device::z80dart_device(running_machine &_machine, const z80dart_device_config &config)
- : device_t(_machine, config),
- device_z80daisy_interface(_machine, config, *this),
- m_config(config)
-{
- for (int i = 0; i < 8; i++)
- m_int_state[i] = 0;
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -285,37 +242,37 @@ z80dart_device::z80dart_device(running_machine &_machine, const z80dart_device_c
void z80dart_device::device_start()
{
// resolve callbacks
- devcb_resolve_write_line(&m_out_int_func, &m_config.m_out_int_func, this);
+ devcb_resolve_write_line(&m_out_int_func, &m_out_int_cb, this);
- m_channel[CHANNEL_A].start(this, CHANNEL_A, m_config.m_in_rxda_func, m_config.m_out_txda_func, m_config.m_out_dtra_func, m_config.m_out_rtsa_func, m_config.m_out_wrdya_func, m_config.m_out_synca_func);
- m_channel[CHANNEL_B].start(this, CHANNEL_B, m_config.m_in_rxdb_func, m_config.m_out_txdb_func, m_config.m_out_dtrb_func, m_config.m_out_rtsb_func, m_config.m_out_wrdyb_func, m_config.m_out_syncb_func);
+ m_channel[CHANNEL_A].start(this, CHANNEL_A, m_in_rxda_cb, m_out_txda_cb, m_out_dtra_cb, m_out_rtsa_cb, m_out_wrdya_cb, m_out_synca_cb);
+ m_channel[CHANNEL_B].start(this, CHANNEL_B, m_in_rxdb_cb, m_out_txdb_cb, m_out_dtrb_cb, m_out_rtsb_cb, m_out_wrdyb_cb, m_out_syncb_cb);
- if (m_config.m_rx_clock_a != 0)
+ if (m_rx_clock_a != 0)
{
// allocate channel A receive timer
m_rxca_timer = machine().scheduler().timer_alloc(FUNC(dart_channel::static_rxc_tick), (void *)&m_channel[CHANNEL_A]);
- m_rxca_timer->adjust(attotime::zero, 0, attotime::from_hz(m_config.m_rx_clock_a));
+ m_rxca_timer->adjust(attotime::zero, 0, attotime::from_hz(m_rx_clock_a));
}
- if (m_config.m_tx_clock_a != 0)
+ if (m_tx_clock_a != 0)
{
// allocate channel A transmit timer
m_txca_timer = machine().scheduler().timer_alloc(FUNC(dart_channel::static_txc_tick), (void *)&m_channel[CHANNEL_A]);
- m_txca_timer->adjust(attotime::zero, 0, attotime::from_hz(m_config.m_tx_clock_a));
+ m_txca_timer->adjust(attotime::zero, 0, attotime::from_hz(m_tx_clock_a));
}
- if (m_config.m_rx_clock_b != 0)
+ if (m_rx_clock_b != 0)
{
// allocate channel B receive timer
m_rxcb_timer = machine().scheduler().timer_alloc(FUNC(dart_channel::static_rxc_tick), (void *)&m_channel[CHANNEL_B]);
- m_rxcb_timer->adjust(attotime::zero, 0, attotime::from_hz(m_config.m_rx_clock_b));
+ m_rxcb_timer->adjust(attotime::zero, 0, attotime::from_hz(m_rx_clock_b));
}
- if (m_config.m_tx_clock_b != 0)
+ if (m_tx_clock_b != 0)
{
// allocate channel B transmit timer
m_txcb_timer = machine().scheduler().timer_alloc(FUNC(dart_channel::static_txc_tick), (void *)&m_channel[CHANNEL_B]);
- m_txcb_timer->adjust(attotime::zero, 0, attotime::from_hz(m_config.m_tx_clock_b));
+ m_txcb_timer->adjust(attotime::zero, 0, attotime::from_hz(m_tx_clock_b));
}
save_item(NAME(m_int_state));