diff options
Diffstat (limited to 'src/emu/machine/z80dart.c')
-rw-r--r-- | src/emu/machine/z80dart.c | 121 |
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)); |