diff --git a/src/emu/bus/a2bus/a2midi.c b/src/emu/bus/a2bus/a2midi.c index cbd5cc3f63e..eddf833895a 100644 --- a/src/emu/bus/a2bus/a2midi.c +++ b/src/emu/bus/a2bus/a2midi.c @@ -32,15 +32,12 @@ static struct ptm6840_interface ptm_interface = DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, a2bus_midi_device, ptm_irq_w) }; -static struct acia6850_interface acia_interface = +static ACIA6850_INTERFACE( acia_interface ) { 31250*16, // tx clock 0, // rx clock (we manually clock rx) - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, a2bus_midi_device, rx_in), // rx in - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, a2bus_midi_device, tx_out), // tx out - DEVCB_NULL, // cts in + DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx), // tx out DEVCB_NULL, // rts out - DEVCB_NULL, // dcd in DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, a2bus_midi_device, acia_irq_w) }; @@ -80,8 +77,7 @@ a2bus_midi_device::a2bus_midi_device(const machine_config &mconfig, const char * device_t(mconfig, A2BUS_MIDI, "6850 MIDI card", tag, owner, clock, "a2midi", __FILE__), device_a2bus_card_interface(mconfig, *this), m_ptm(*this, MIDI_PTM_TAG), - m_acia(*this, MIDI_ACIA_TAG), - m_mdout(*this, "mdout") + m_acia(*this, MIDI_ACIA_TAG) { } @@ -89,8 +85,7 @@ a2bus_midi_device::a2bus_midi_device(const machine_config &mconfig, device_type device_t(mconfig, type, name, tag, owner, clock, shortname, source), device_a2bus_card_interface(mconfig, *this), m_ptm(*this, MIDI_PTM_TAG), - m_acia(*this, MIDI_ACIA_TAG), - m_mdout(*this, "mdout") + m_acia(*this, MIDI_ACIA_TAG) { } @@ -107,7 +102,6 @@ void a2bus_midi_device::device_start() void a2bus_midi_device::device_reset() { m_acia_irq = m_ptm_irq = false; - m_rx_state = 0; } /*------------------------------------------------- @@ -192,19 +186,10 @@ WRITE_LINE_MEMBER( a2bus_midi_device::ptm_irq_w ) WRITE_LINE_MEMBER( a2bus_midi_device::midi_rx_w ) { - m_rx_state = state; + m_acia->write_rx(state); + for (int i = 0; i < 16; i++) // divider is set to 16 { m_acia->rx_clock_in(); } } - -READ_LINE_MEMBER( a2bus_midi_device::rx_in ) -{ - return m_rx_state; -} - -WRITE_LINE_MEMBER( a2bus_midi_device::tx_out ) -{ - m_mdout->tx(state); -} diff --git a/src/emu/bus/a2bus/a2midi.h b/src/emu/bus/a2bus/a2midi.h index f06c4f86630..1cd1c447c75 100644 --- a/src/emu/bus/a2bus/a2midi.h +++ b/src/emu/bus/a2bus/a2midi.h @@ -36,8 +36,6 @@ public: DECLARE_WRITE_LINE_MEMBER( acia_irq_w ); DECLARE_WRITE_LINE_MEMBER( ptm_irq_w ); DECLARE_WRITE_LINE_MEMBER( midi_rx_w ); - DECLARE_READ_LINE_MEMBER( rx_in ); - DECLARE_WRITE_LINE_MEMBER( tx_out ); protected: virtual void device_start(); @@ -48,11 +46,9 @@ protected: required_device m_ptm; required_device m_acia; - required_device m_mdout; private: bool m_acia_irq, m_ptm_irq; - int m_rx_state; }; // device type definition diff --git a/src/emu/bus/c64/midi_maplin.c b/src/emu/bus/c64/midi_maplin.c index 22bf507114d..4300d2b95e2 100644 --- a/src/emu/bus/c64/midi_maplin.c +++ b/src/emu/bus/c64/midi_maplin.c @@ -37,24 +37,11 @@ WRITE_LINE_MEMBER( c64_maplin_midi_cartridge_device::acia_irq_w ) m_slot->irq_w(state); } -READ_LINE_MEMBER( c64_maplin_midi_cartridge_device::rx_in ) -{ - return m_rx_state; -} - -WRITE_LINE_MEMBER( c64_maplin_midi_cartridge_device::tx_out ) -{ - m_mdout->tx(state); -} - static ACIA6850_INTERFACE( acia_intf ) { 500000, 0, // rx clock (we manually clock rx) - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_maplin_midi_cartridge_device, rx_in), - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_maplin_midi_cartridge_device, tx_out), - DEVCB_NULL, - DEVCB_NULL, + DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx), DEVCB_NULL, DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_maplin_midi_cartridge_device, acia_irq_w) }; @@ -70,7 +57,7 @@ SLOT_INTERFACE_END WRITE_LINE_MEMBER( c64_maplin_midi_cartridge_device::midi_rx_w ) { - m_rx_state = state; + m_acia->write_rx(state); for (int i = 0; i < 16; i++) // divider is set to 64 { @@ -125,9 +112,7 @@ machine_config_constructor c64_maplin_midi_cartridge_device::device_mconfig_addi c64_maplin_midi_cartridge_device::c64_maplin_midi_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, C64_MIDI_MAPLIN, "C64 Maplin MIDI", tag, owner, clock, "c64_midimap", __FILE__), device_c64_expansion_card_interface(mconfig, *this), - m_acia(*this, MC6850_TAG), - m_mdout(*this, "mdout"), - m_rx_state(0) + m_acia(*this, MC6850_TAG) { } @@ -139,7 +124,6 @@ c64_maplin_midi_cartridge_device::c64_maplin_midi_cartridge_device(const machine void c64_maplin_midi_cartridge_device::device_start() { // state saving - save_item(NAME(m_rx_state)); } @@ -150,8 +134,6 @@ void c64_maplin_midi_cartridge_device::device_start() void c64_maplin_midi_cartridge_device::device_reset() { m_acia->reset(); - - m_rx_state = 0; } diff --git a/src/emu/bus/c64/midi_maplin.h b/src/emu/bus/c64/midi_maplin.h index a7fa955e957..94faa9a5c20 100644 --- a/src/emu/bus/c64/midi_maplin.h +++ b/src/emu/bus/c64/midi_maplin.h @@ -41,8 +41,6 @@ public: DECLARE_WRITE_LINE_MEMBER( acia_irq_w ); DECLARE_WRITE_LINE_MEMBER( midi_rx_w ); - DECLARE_READ_LINE_MEMBER( rx_in ); - DECLARE_WRITE_LINE_MEMBER( tx_out ); protected: // device-level overrides @@ -55,9 +53,6 @@ protected: private: required_device m_acia; - required_device m_mdout; - - int m_rx_state; }; diff --git a/src/emu/bus/c64/midi_namesoft.c b/src/emu/bus/c64/midi_namesoft.c index 8e27fd63601..dcee8205f1c 100644 --- a/src/emu/bus/c64/midi_namesoft.c +++ b/src/emu/bus/c64/midi_namesoft.c @@ -37,24 +37,11 @@ WRITE_LINE_MEMBER( c64_namesoft_midi_cartridge_device::acia_irq_w ) m_slot->nmi_w(state); } -READ_LINE_MEMBER( c64_namesoft_midi_cartridge_device::rx_in ) -{ - return m_rx_state; -} - -WRITE_LINE_MEMBER( c64_namesoft_midi_cartridge_device::tx_out ) -{ - m_mdout->tx(state); -} - static ACIA6850_INTERFACE( acia_intf ) { 500000, 0, // rx clock (we manually clock rx) - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_namesoft_midi_cartridge_device, rx_in), - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_namesoft_midi_cartridge_device, tx_out), - DEVCB_NULL, - DEVCB_NULL, + DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx), DEVCB_NULL, DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_namesoft_midi_cartridge_device, acia_irq_w) }; @@ -70,7 +57,7 @@ SLOT_INTERFACE_END WRITE_LINE_MEMBER( c64_namesoft_midi_cartridge_device::midi_rx_w ) { - m_rx_state = state; + m_acia->write_rx(state); for (int i = 0; i < 16; i++) // divider is set to 16 { @@ -125,9 +112,7 @@ machine_config_constructor c64_namesoft_midi_cartridge_device::device_mconfig_ad c64_namesoft_midi_cartridge_device::c64_namesoft_midi_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, C64_MIDI_NAMESOFT, "C64 Namesoft MIDI", tag, owner, clock, "c64_midins", __FILE__), device_c64_expansion_card_interface(mconfig, *this), - m_acia(*this, MC6850_TAG), - m_mdout(*this, "mdout"), - m_rx_state(0) + m_acia(*this, MC6850_TAG) { } @@ -138,8 +123,6 @@ c64_namesoft_midi_cartridge_device::c64_namesoft_midi_cartridge_device(const mac void c64_namesoft_midi_cartridge_device::device_start() { - // state saving - save_item(NAME(m_rx_state)); } //------------------------------------------------- @@ -149,8 +132,6 @@ void c64_namesoft_midi_cartridge_device::device_start() void c64_namesoft_midi_cartridge_device::device_reset() { m_acia->reset(); - - m_rx_state = 0; } diff --git a/src/emu/bus/c64/midi_namesoft.h b/src/emu/bus/c64/midi_namesoft.h index 8a22d84c39d..f5d54f6337f 100644 --- a/src/emu/bus/c64/midi_namesoft.h +++ b/src/emu/bus/c64/midi_namesoft.h @@ -41,9 +41,6 @@ public: DECLARE_WRITE_LINE_MEMBER( acia_irq_w ); DECLARE_WRITE_LINE_MEMBER( midi_rx_w ); - DECLARE_READ_LINE_MEMBER( rx_in ); - DECLARE_WRITE_LINE_MEMBER( tx_out ); - protected: // device-level overrides virtual void device_start(); @@ -55,9 +52,6 @@ protected: private: required_device m_acia; - required_device m_mdout; - - int m_rx_state; }; diff --git a/src/emu/bus/c64/midi_passport.c b/src/emu/bus/c64/midi_passport.c index 6c25fce3c2a..3c4a1d092b0 100644 --- a/src/emu/bus/c64/midi_passport.c +++ b/src/emu/bus/c64/midi_passport.c @@ -60,24 +60,11 @@ WRITE_LINE_MEMBER( c64_passport_midi_cartridge_device::acia_irq_w ) m_slot->irq_w(m_ptm_irq || m_acia_irq); } -READ_LINE_MEMBER( c64_passport_midi_cartridge_device::rx_in ) -{ - return m_rx_state; -} - -WRITE_LINE_MEMBER( c64_passport_midi_cartridge_device::tx_out ) -{ - m_mdout->tx(state); -} - static ACIA6850_INTERFACE( acia_intf ) { 500000, 0, // rx clock (we manually clock rx) - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_passport_midi_cartridge_device, rx_in), - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_passport_midi_cartridge_device, tx_out), - DEVCB_NULL, - DEVCB_NULL, + DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx), DEVCB_NULL, DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_passport_midi_cartridge_device, acia_irq_w) }; @@ -93,7 +80,7 @@ SLOT_INTERFACE_END WRITE_LINE_MEMBER( c64_passport_midi_cartridge_device::midi_rx_w ) { - m_rx_state = state; + m_acia->write_rx(state); for (int i = 0; i < 16; i++) // divider is set to 16 { @@ -151,10 +138,8 @@ c64_passport_midi_cartridge_device::c64_passport_midi_cartridge_device(const mac device_c64_expansion_card_interface(mconfig, *this), m_acia(*this, MC6850_TAG), m_ptm(*this, MC6840_TAG), - m_mdout(*this, "mdout"), m_ptm_irq(CLEAR_LINE), - m_acia_irq(CLEAR_LINE), - m_rx_state(0) + m_acia_irq(CLEAR_LINE) { } @@ -168,7 +153,6 @@ void c64_passport_midi_cartridge_device::device_start() // state saving save_item(NAME(m_ptm_irq)); save_item(NAME(m_acia_irq)); - save_item(NAME(m_rx_state)); } @@ -180,8 +164,6 @@ void c64_passport_midi_cartridge_device::device_reset() { m_acia->reset(); m_ptm->reset(); - - m_rx_state = 0; } diff --git a/src/emu/bus/c64/midi_passport.h b/src/emu/bus/c64/midi_passport.h index 2ca08538506..fe02d5fef52 100644 --- a/src/emu/bus/c64/midi_passport.h +++ b/src/emu/bus/c64/midi_passport.h @@ -43,8 +43,6 @@ public: DECLARE_WRITE_LINE_MEMBER( ptm_irq_w ); DECLARE_WRITE_LINE_MEMBER( acia_irq_w ); DECLARE_WRITE_LINE_MEMBER( midi_rx_w ); - DECLARE_READ_LINE_MEMBER( rx_in ); - DECLARE_WRITE_LINE_MEMBER( tx_out ); protected: // device-level overrides @@ -58,11 +56,9 @@ protected: private: required_device m_acia; required_device m_ptm; - required_device m_mdout; int m_ptm_irq; int m_acia_irq; - int m_rx_state; }; diff --git a/src/emu/bus/c64/midi_sci.c b/src/emu/bus/c64/midi_sci.c index c62815ceaef..144e1510299 100644 --- a/src/emu/bus/c64/midi_sci.c +++ b/src/emu/bus/c64/midi_sci.c @@ -37,24 +37,11 @@ WRITE_LINE_MEMBER( c64_sequential_midi_cartridge_device::acia_irq_w ) m_slot->irq_w(state); } -READ_LINE_MEMBER( c64_sequential_midi_cartridge_device::rx_in ) -{ - return m_rx_state; -} - -WRITE_LINE_MEMBER( c64_sequential_midi_cartridge_device::tx_out ) -{ - m_mdout->tx(state); -} - static ACIA6850_INTERFACE( acia_intf ) { 500000, 0, // rx clock (we manually clock rx) - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_sequential_midi_cartridge_device, rx_in), - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_sequential_midi_cartridge_device, tx_out), - DEVCB_NULL, - DEVCB_NULL, + DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx), DEVCB_NULL, DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_sequential_midi_cartridge_device, acia_irq_w) }; @@ -70,7 +57,7 @@ SLOT_INTERFACE_END WRITE_LINE_MEMBER( c64_sequential_midi_cartridge_device::midi_rx_w ) { - m_rx_state = state; + m_acia->write_rx(state); for (int i = 0; i < 16; i++) // divider is set to 16 { @@ -125,9 +112,7 @@ machine_config_constructor c64_sequential_midi_cartridge_device::device_mconfig_ c64_sequential_midi_cartridge_device::c64_sequential_midi_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, C64_MIDI_SCI, "C64 Sequential Circuits MIDI", tag, owner, clock, "c64_midisci", __FILE__), device_c64_expansion_card_interface(mconfig, *this), - m_acia(*this, MC6850_TAG), - m_mdout(*this, "mdout"), - m_rx_state(0) + m_acia(*this, MC6850_TAG) { } @@ -139,7 +124,6 @@ c64_sequential_midi_cartridge_device::c64_sequential_midi_cartridge_device(const void c64_sequential_midi_cartridge_device::device_start() { // state saving - save_item(NAME(m_rx_state)); } //------------------------------------------------- @@ -149,8 +133,6 @@ void c64_sequential_midi_cartridge_device::device_start() void c64_sequential_midi_cartridge_device::device_reset() { m_acia->reset(); - - m_rx_state = 0; } diff --git a/src/emu/bus/c64/midi_sci.h b/src/emu/bus/c64/midi_sci.h index 2ad263e5efc..c1ff88cdcb8 100644 --- a/src/emu/bus/c64/midi_sci.h +++ b/src/emu/bus/c64/midi_sci.h @@ -41,8 +41,6 @@ public: DECLARE_WRITE_LINE_MEMBER( acia_irq_w ); DECLARE_WRITE_LINE_MEMBER( midi_rx_w ); - DECLARE_READ_LINE_MEMBER( rx_in ); - DECLARE_WRITE_LINE_MEMBER( tx_out ); protected: // device-level overrides @@ -55,9 +53,6 @@ protected: private: required_device m_acia; - required_device m_mdout; - - int m_rx_state; }; diff --git a/src/emu/bus/c64/midi_siel.c b/src/emu/bus/c64/midi_siel.c index 825a071d2df..8f2e4160365 100644 --- a/src/emu/bus/c64/midi_siel.c +++ b/src/emu/bus/c64/midi_siel.c @@ -37,24 +37,11 @@ WRITE_LINE_MEMBER( c64_siel_midi_cartridge_device::acia_irq_w ) m_slot->irq_w(state); } -READ_LINE_MEMBER( c64_siel_midi_cartridge_device::rx_in ) -{ - return m_rx_state; -} - -WRITE_LINE_MEMBER( c64_siel_midi_cartridge_device::tx_out ) -{ - m_mdout->tx(state); -} - static ACIA6850_INTERFACE( acia_intf ) { XTAL_2MHz, 0, // rx clock (we manually clock rx) - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_siel_midi_cartridge_device, rx_in), - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_siel_midi_cartridge_device, tx_out), - DEVCB_NULL, - DEVCB_NULL, + DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx), DEVCB_NULL, DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_siel_midi_cartridge_device, acia_irq_w) }; @@ -70,7 +57,7 @@ SLOT_INTERFACE_END WRITE_LINE_MEMBER( c64_siel_midi_cartridge_device::midi_rx_w ) { - m_rx_state = state; + m_acia->write_rx(state); for (int i = 0; i < 64; i++) // divider is set to 64 { @@ -125,9 +112,7 @@ machine_config_constructor c64_siel_midi_cartridge_device::device_mconfig_additi c64_siel_midi_cartridge_device::c64_siel_midi_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, C64_MIDI_SIEL, "C64 Siel MIDI", tag, owner, clock, "c64_midisiel", __FILE__), device_c64_expansion_card_interface(mconfig, *this), - m_acia(*this, MC6850_TAG), - m_mdout(*this, "mdout"), - m_rx_state(0) + m_acia(*this, MC6850_TAG) { } @@ -139,7 +124,6 @@ c64_siel_midi_cartridge_device::c64_siel_midi_cartridge_device(const machine_con void c64_siel_midi_cartridge_device::device_start() { // state saving - save_item(NAME(m_rx_state)); } @@ -150,8 +134,6 @@ void c64_siel_midi_cartridge_device::device_start() void c64_siel_midi_cartridge_device::device_reset() { m_acia->reset(); - - m_rx_state = 0; } diff --git a/src/emu/bus/c64/midi_siel.h b/src/emu/bus/c64/midi_siel.h index deb5ee01a6b..80a94d25f7a 100644 --- a/src/emu/bus/c64/midi_siel.h +++ b/src/emu/bus/c64/midi_siel.h @@ -41,8 +41,6 @@ public: DECLARE_WRITE_LINE_MEMBER( acia_irq_w ); DECLARE_WRITE_LINE_MEMBER( midi_rx_w ); - DECLARE_READ_LINE_MEMBER( rx_in ); - DECLARE_WRITE_LINE_MEMBER( tx_out ); protected: // device-level overrides @@ -55,9 +53,6 @@ protected: private: required_device m_acia; - required_device m_mdout; - - int m_rx_state; }; diff --git a/src/emu/bus/cbmiec/interpod.c b/src/emu/bus/cbmiec/interpod.c index 302b7967295..6876edadeb4 100644 --- a/src/emu/bus/cbmiec/interpod.c +++ b/src/emu/bus/cbmiec/interpod.c @@ -169,9 +169,6 @@ static ACIA6850_INTERFACE( acia_intf ) 0, DEVCB_NULL, DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, DEVCB_NULL }; diff --git a/src/emu/machine/6850acia.c b/src/emu/machine/6850acia.c index 0e9b2641311..fb1291857f0 100644 --- a/src/emu/machine/6850acia.c +++ b/src/emu/machine/6850acia.c @@ -84,11 +84,8 @@ void acia6850_device::static_set_interface(device_t &device, const acia6850_inte void acia6850_device::device_start() { // resolve callbacks - m_in_rx_func.resolve(m_in_rx_cb, *this); m_out_tx_func.resolve(m_out_tx_cb, *this); - m_in_cts_func.resolve(m_in_cts_cb, *this); m_out_rts_func.resolve(m_out_rts_cb, *this); - m_in_dcd_func.resolve(m_in_dcd_cb, *this); m_out_irq_func.resolve(m_out_irq_cb, *this); m_tx_counter = 0; @@ -124,6 +121,9 @@ void acia6850_device::device_start() save_item(NAME(m_first_reset)); save_item(NAME(m_rts)); save_item(NAME(m_brk)); + save_item(NAME(m_rxd)); + save_item(NAME(m_dcd)); + save_item(NAME(m_cts)); save_item(NAME(m_status_read)); save_item(NAME(m_dcd_triggered)); } @@ -135,10 +135,7 @@ void acia6850_device::device_start() void acia6850_device::device_reset() { - int cts = m_in_cts_func(); - int dcd = m_in_dcd_func(); - - m_status = (cts << 3) | (dcd << 2) | ACIA6850_STATUS_TDRE; + m_status = (m_cts << 3) | (m_dcd << 2) | ACIA6850_STATUS_TDRE; m_tdr = 0; m_rdr = 0; m_tx_shift = 0; @@ -178,6 +175,20 @@ void acia6850_device::device_reset() } } +DECLARE_WRITE_LINE_MEMBER( acia6850_device::write_rx ) +{ + m_rts = state; +} + +DECLARE_WRITE_LINE_MEMBER( acia6850_device::write_dcd ) +{ + m_dcd = state; +} + +DECLARE_WRITE_LINE_MEMBER( acia6850_device::write_cts ) +{ + m_cts = state; +} //------------------------------------------------- // device_timer - handle timer callbacks @@ -226,9 +237,7 @@ READ8_MEMBER( acia6850_device::status_read ) void acia6850_device::check_dcd_input() { - int dcd = m_in_dcd_func(); - - if (dcd) + if (m_dcd) { // IRQ from DCD is edge triggered if ( ! ( m_status & ACIA6850_STATUS_DCD ) ) @@ -438,9 +447,7 @@ void acia6850_device::tx_tick() } else { - int _cts = m_in_cts_func(); - - if (_cts) + if (m_cts) { m_status |= ACIA6850_STATUS_CTS; } @@ -542,9 +549,7 @@ void acia6850_device::tx_tick() void acia6850_device::tx_clock_in() { - int _cts = m_in_cts_func(); - - if (_cts) + if (m_cts) { m_status |= ACIA6850_STATUS_CTS; } @@ -578,13 +583,11 @@ void acia6850_device::rx_tick() } else { - int rxd = m_in_rx_func(); - switch (m_rx_state) { case START: { - if (rxd == 0) + if (m_rxd == 0) { if (LOG) logerror("MC6850 '%s': RX START BIT\n", tag()); m_rx_shift = 0; @@ -596,9 +599,9 @@ void acia6850_device::rx_tick() } case DATA: { - if (LOG) logerror("MC6850 '%s': RX DATA BIT %x\n", tag(), rxd); - m_rx_shift |= rxd ? 0x80 : 0; - m_rx_parity ^= rxd; + if (LOG) logerror("MC6850 '%s': RX DATA BIT %x\n", tag(), m_rxd); + m_rx_shift |= m_rxd ? 0x80 : 0; + m_rx_parity ^= m_rxd; if (--m_rx_bits == 0) { @@ -618,8 +621,8 @@ void acia6850_device::rx_tick() } case PARITY: { - if (LOG) logerror("MC6850 '%s': RX PARITY BIT %x\n", tag(), rxd); - m_rx_parity ^= rxd; + if (LOG) logerror("MC6850 '%s': RX PARITY BIT %x\n", tag(), m_rxd); + m_rx_parity ^= m_rxd; if (m_parity == EVEN) { @@ -641,7 +644,7 @@ void acia6850_device::rx_tick() } case STOP: { - if (rxd == 1) + if (m_rxd == 1) { if (LOG) logerror("MC6850 '%s': RX STOP BIT\n", tag()); if (m_stopbits == 1) @@ -672,7 +675,7 @@ void acia6850_device::rx_tick() } case STOP2: { - if (rxd == 1) + if (m_rxd == 1) { if (LOG) logerror("MC6850 '%s': RX STOP BIT\n", tag()); m_status &= ~ACIA6850_STATUS_FE; diff --git a/src/emu/machine/6850acia.h b/src/emu/machine/6850acia.h index 2f188b1e11b..07853c13972 100644 --- a/src/emu/machine/6850acia.h +++ b/src/emu/machine/6850acia.h @@ -54,13 +54,8 @@ struct acia6850_interface int m_tx_clock; int m_rx_clock; - devcb_read_line m_in_rx_cb; devcb_write_line m_out_tx_cb; - - devcb_read_line m_in_cts_cb; devcb_write_line m_out_rts_cb; - devcb_read_line m_in_dcd_cb; - devcb_write_line m_out_irq_cb; }; @@ -83,6 +78,10 @@ public: DECLARE_WRITE8_MEMBER( data_write ); DECLARE_READ8_MEMBER( data_read ); + DECLARE_WRITE_LINE_MEMBER( write_rx ); + DECLARE_WRITE_LINE_MEMBER( write_dcd ); + DECLARE_WRITE_LINE_MEMBER( write_cts ); + void tx_clock_in(); void rx_clock_in(); @@ -131,11 +130,8 @@ private: EVEN }; - devcb_resolved_read_line m_in_rx_func; devcb_resolved_write_line m_out_tx_func; - devcb_resolved_read_line m_in_cts_func; devcb_resolved_write_line m_out_rts_func; - devcb_resolved_read_line m_in_dcd_func; devcb_resolved_write_line m_out_irq_func; UINT8 m_ctrl; @@ -174,6 +170,9 @@ private: serial_state m_tx_state; int m_irq; bool m_dcd_triggered; + int m_rxd; + int m_dcd; + int m_cts; emu_timer *m_rx_timer; emu_timer *m_tx_timer; diff --git a/src/mame/drivers/bfcobra.c b/src/mame/drivers/bfcobra.c index a2752015a11..c7909edd06d 100644 --- a/src/mame/drivers/bfcobra.c +++ b/src/mame/drivers/bfcobra.c @@ -238,6 +238,7 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), + m_acia6850_2(*this, "acia6850_2"), m_upd7759(*this, "upd") { } UINT8 m_bank_data[4]; @@ -248,8 +249,6 @@ public: UINT8 m_flip_8; UINT8 m_flip_22; UINT8 m_videomode; - UINT8 m_z80_m6809_line; - UINT8 m_m6809_z80_line; UINT8 m_data_r; UINT8 m_data_t; int m_irq_state; @@ -286,13 +285,8 @@ public: DECLARE_WRITE8_MEMBER(fd_ctrl_w); DECLARE_READ8_MEMBER(upd_r); DECLARE_WRITE8_MEMBER(upd_w); - DECLARE_READ_LINE_MEMBER(z80_acia_rx_r); - DECLARE_WRITE_LINE_MEMBER(z80_acia_tx_w); DECLARE_WRITE_LINE_MEMBER(z80_acia_irq); - DECLARE_READ_LINE_MEMBER(m6809_acia_rx_r); - DECLARE_WRITE_LINE_MEMBER(m6809_acia_tx_w); DECLARE_WRITE_LINE_MEMBER(m6809_data_irq); - DECLARE_READ_LINE_MEMBER(data_acia_rx_r); DECLARE_WRITE_LINE_MEMBER(data_acia_tx_w); DECLARE_DRIVER_INIT(bfcobra); virtual void machine_reset(); @@ -312,6 +306,7 @@ public: UINT8 results_phase(void); required_device m_maincpu; required_device m_audiocpu; + required_device m_acia6850_2; required_device m_upd7759; }; @@ -1618,16 +1613,6 @@ void bfcobra_state::init_ram() What are the correct ACIA clocks ? */ -READ_LINE_MEMBER(bfcobra_state::z80_acia_rx_r) -{ - return m_m6809_z80_line; -} - -WRITE_LINE_MEMBER(bfcobra_state::z80_acia_tx_w) -{ - m_z80_m6809_line = state; -} - WRITE_LINE_MEMBER(bfcobra_state::z80_acia_irq) { m_acia_irq = state; @@ -1638,24 +1623,11 @@ static ACIA6850_INTERFACE( z80_acia_if ) { 500000, 500000, - DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,z80_acia_rx_r), /*&m6809_z80_line,*/ - DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,z80_acia_tx_w), /*&z80_m6809_line,*/ - DEVCB_NULL, - DEVCB_NULL, + DEVCB_DEVICE_LINE_MEMBER("acia6850_1", acia6850_device, write_rx), DEVCB_NULL, DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,z80_acia_irq) }; -READ_LINE_MEMBER(bfcobra_state::m6809_acia_rx_r) -{ - return m_z80_m6809_line; -} - -WRITE_LINE_MEMBER(bfcobra_state::m6809_acia_tx_w) -{ - m_m6809_z80_line = state; -} - WRITE_LINE_MEMBER(bfcobra_state::m6809_data_irq) { m_audiocpu->set_input_line(M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE); @@ -1665,22 +1637,14 @@ static ACIA6850_INTERFACE( m6809_acia_if ) { 500000, 500000, - DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,m6809_acia_rx_r),/*&z80_m6809_line,*/ - DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,m6809_acia_tx_w),/*&m6809_z80_line,*/ - DEVCB_NULL, - DEVCB_NULL, + DEVCB_DEVICE_LINE_MEMBER("acia6850_0", acia6850_device, write_rx), DEVCB_NULL, DEVCB_NULL }; -READ_LINE_MEMBER(bfcobra_state::data_acia_rx_r) -{ - return m_data_r; -} - WRITE_LINE_MEMBER(bfcobra_state::data_acia_tx_w) { - m_data_t = state; + m_data_t = state; } @@ -1688,11 +1652,8 @@ static ACIA6850_INTERFACE( data_acia_if ) { 500000, 500000, - DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,data_acia_rx_r),/*data_r,*/ DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,data_acia_tx_w),/*data_t,*/ DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,m6809_data_irq) }; @@ -1744,11 +1705,9 @@ DRIVER_INIT_MEMBER(bfcobra_state,bfcobra) membank("bank4")->set_base(memregion("user1")->base()); /* TODO: Properly sort out the data ACIA */ - m_data_r = 1; + m_acia6850_2->write_rx(1); /* Finish this */ - save_item(NAME(m_z80_m6809_line)); - save_item(NAME(m_m6809_z80_line)); save_item(NAME(m_data_r)); save_item(NAME(m_data_t)); save_item(NAME(m_h_scroll)); diff --git a/src/mame/drivers/bfmsys85.c b/src/mame/drivers/bfmsys85.c index d5fc2c096db..d28a88d26ed 100644 --- a/src/mame/drivers/bfmsys85.c +++ b/src/mame/drivers/bfmsys85.c @@ -90,7 +90,6 @@ public: int m_mux_input; UINT8 m_Inputs[64]; UINT8 m_codec_data[256]; - UINT8 m_sys85_data_line_r; UINT8 m_sys85_data_line_t; DECLARE_WRITE8_MEMBER(watchdog_w); DECLARE_READ8_MEMBER(irqlatch_r); @@ -124,11 +123,6 @@ public: /////////////////////////////////////////////////////////////////////////// -READ_LINE_MEMBER(bfmsys85_state::sys85_data_r) -{ - return m_sys85_data_line_r; -} - WRITE_LINE_MEMBER(bfmsys85_state::sys85_data_w) { m_sys85_data_line_t = state; @@ -138,8 +132,8 @@ static ACIA6850_INTERFACE( m6809_acia_if ) { 500000, 500000, - DEVCB_DRIVER_LINE_MEMBER(bfmsys85_state,sys85_data_r), DEVCB_DRIVER_LINE_MEMBER(bfmsys85_state,sys85_data_w), + DEVCB_NULL, DEVCB_NULL }; diff --git a/src/mame/drivers/calomega.c b/src/mame/drivers/calomega.c index 1053b3c3645..5779b85cf3b 100644 --- a/src/mame/drivers/calomega.c +++ b/src/mame/drivers/calomega.c @@ -2652,11 +2652,6 @@ static const pia6821_interface sys906_pia1_intf = * ACIA Interface * *************************************************/ -READ_LINE_MEMBER(calomega_state::acia_rx_r) -{ - return m_rx_line; -} - WRITE_LINE_MEMBER(calomega_state::acia_tx_w) { m_tx_line = state; @@ -2666,11 +2661,8 @@ static ACIA6850_INTERFACE( acia6850_intf ) { UART_CLOCK, UART_CLOCK, - DEVCB_DRIVER_LINE_MEMBER(calomega_state,acia_rx_r), /*&rx_line,*/ DEVCB_DRIVER_LINE_MEMBER(calomega_state,acia_tx_w), /*&tx_line,*/ DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, DEVCB_DRIVER_LINE_MEMBER(calomega_state,tx_rx_clk) }; diff --git a/src/mame/drivers/jpmsys5.c b/src/mame/drivers/jpmsys5.c index 115ef7d110c..404c1ca681d 100644 --- a/src/mame/drivers/jpmsys5.c +++ b/src/mame/drivers/jpmsys5.c @@ -352,13 +352,13 @@ TIMER_CALLBACK_MEMBER(jpmsys5_state::touch_cb) case START: { m_touch_shift_cnt = 0; - m_a2_data_in = 0; + acia6850_2->write_rx(0); m_touch_state = DATA; break; } case DATA: { - m_a2_data_in = (m_touch_data[m_touch_data_count] >> (m_touch_shift_cnt)) & 1; + acia6850_2->write_rx((m_touch_data[m_touch_data_count] >> (m_touch_shift_cnt)) & 1); if (++m_touch_shift_cnt == 8) m_touch_state = STOP1; @@ -367,13 +367,13 @@ TIMER_CALLBACK_MEMBER(jpmsys5_state::touch_cb) } case STOP1: { - m_a2_data_in = 1; + acia6850_2->write_rx(1); m_touch_state = STOP2; break; } case STOP2: { - m_a2_data_in = 1; + acia6850_2->write_rx(1); if (++m_touch_data_count == 3) { @@ -596,84 +596,45 @@ WRITE_LINE_MEMBER(jpmsys5_state::acia_irq) /* Clocks are incorrect */ -READ_LINE_MEMBER(jpmsys5_state::a0_rx_r) -{ - return m_a0_data_in; -} - WRITE_LINE_MEMBER(jpmsys5_state::a0_tx_w) { m_a0_data_out = state; } -READ_LINE_MEMBER(jpmsys5_state::a0_dcd_r) -{ - return m_a0_acia_dcd; -} - static ACIA6850_INTERFACE( acia0_if ) { 10000, 10000, - DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a0_rx_r), /*&a0_data_in,*/ DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a0_tx_w), /*&a0_data_out,*/ DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a0_dcd_r), /*&a0_acia_dcd,*/ DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,acia_irq) }; -READ_LINE_MEMBER(jpmsys5_state::a1_rx_r) -{ - return m_a1_data_in; -} - WRITE_LINE_MEMBER(jpmsys5_state::a1_tx_w) { m_a1_data_out = state; } -READ_LINE_MEMBER(jpmsys5_state::a1_dcd_r) -{ - return m_a1_acia_dcd; -} - static ACIA6850_INTERFACE( acia1_if ) { 10000, 10000, - DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a1_rx_r), /*&state->m_a1_data_in,*/ DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a1_tx_w), /*&state->m_a1_data_out,*/ DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a1_dcd_r), /*&state->m_a1_acia_dcd,*/ DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,acia_irq) }; -READ_LINE_MEMBER(jpmsys5_state::a2_rx_r) -{ - return m_a2_data_in; -} - WRITE_LINE_MEMBER(jpmsys5_state::a2_tx_w) { m_a2_data_out = state; } -READ_LINE_MEMBER(jpmsys5_state::a2_dcd_r) -{ - return m_a2_acia_dcd; -} - static ACIA6850_INTERFACE( acia2_if ) { 10000, 10000, - DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a2_rx_r), /*&state->m_a2_data_in,*/ DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a2_tx_w), /*&state->m_a2_data_out,*/ DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a2_dcd_r), /*&state->m_a2_acia_dcd,*/ DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,acia_irq) }; @@ -694,8 +655,8 @@ MACHINE_RESET_MEMBER(jpmsys5_state,jpmsys5v) { m_touch_timer->reset(); m_touch_state = IDLE; - m_a2_data_in = 1; - m_a2_acia_dcd = 0; + acia6850_2->write_rx(1); + acia6850_2->write_dcd(0); m_vfd->reset(); } @@ -892,8 +853,8 @@ MACHINE_START_MEMBER(jpmsys5_state,jpmsys5) MACHINE_RESET_MEMBER(jpmsys5_state,jpmsys5) { - m_a2_data_in = 1; - m_a2_acia_dcd = 0; + acia6850_2->write_rx(1); + acia6850_2->write_dcd(0); m_vfd->reset(); } diff --git a/src/mame/drivers/mpu4vid.c b/src/mame/drivers/mpu4vid.c index 2538f85650d..39e16a6137f 100644 --- a/src/mame/drivers/mpu4vid.c +++ b/src/mame/drivers/mpu4vid.c @@ -247,12 +247,6 @@ public: //Video UINT8 m_m6840_irq_state; UINT8 m_m6850_irq_state; - UINT8 m_m68k_m6809_line; - UINT8 m_m6809_m68k_line; - UINT8 m_m68k_acia_cts; - UINT8 m_m6809_acia_cts; - UINT8 m_m6809_acia_rts; - UINT8 m_m6809_acia_dcd; int m_gfx_index; INT8 m_cur[2]; @@ -282,17 +276,7 @@ public: DECLARE_VIDEO_START(mpu4_vid); UINT32 screen_update_mpu4_vid(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); TIMER_DEVICE_CALLBACK_MEMBER(scanline_timer_callback); - DECLARE_READ_LINE_MEMBER(m6809_acia_rx_r); - DECLARE_WRITE_LINE_MEMBER(m6809_acia_tx_w); - DECLARE_READ_LINE_MEMBER(m6809_acia_cts_r); - DECLARE_WRITE_LINE_MEMBER(m6809_acia_rts_w); - DECLARE_READ_LINE_MEMBER(m6809_acia_dcd_r); DECLARE_WRITE_LINE_MEMBER(m6809_acia_irq); - DECLARE_READ_LINE_MEMBER(m68k_acia_rx_r); - DECLARE_WRITE_LINE_MEMBER(m68k_acia_tx_w); - DECLARE_READ_LINE_MEMBER(m68k_acia_cts_r); - DECLARE_WRITE_LINE_MEMBER(m68k_acia_rts_w); - DECLARE_READ_LINE_MEMBER(m68k_acia_dcd_r); DECLARE_WRITE_LINE_MEMBER(m68k_acia_irq); DECLARE_WRITE_LINE_MEMBER(cpu1_ptm_irq); DECLARE_WRITE8_MEMBER(vid_o1_callback); @@ -343,34 +327,9 @@ WRITE_LINE_MEMBER(mpu4vid_state::update_mpu68_interrupts) /* Communications with 6809 board */ -READ_LINE_MEMBER(mpu4vid_state::m6809_acia_rx_r) -{ - return m_m68k_m6809_line; -} - -WRITE_LINE_MEMBER(mpu4vid_state::m6809_acia_tx_w) -{ - m_m6809_m68k_line = state; -} - -READ_LINE_MEMBER(mpu4vid_state::m6809_acia_cts_r) -{ - return m_m6809_acia_cts; -} - -WRITE_LINE_MEMBER(mpu4vid_state::m6809_acia_rts_w) -{ - m_m6809_acia_rts = state; -} - -READ_LINE_MEMBER(mpu4vid_state::m6809_acia_dcd_r) -{ - return m_m6809_acia_dcd; -} - WRITE_LINE_MEMBER(mpu4vid_state::m6809_acia_irq) { - m_m68k_acia_cts = state; + m_acia_1->write_cts(state); m_maincpu->set_input_line(M6809_IRQ_LINE, state); } @@ -378,42 +337,14 @@ static ACIA6850_INTERFACE( m6809_acia_if ) { 0, 0, - DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_rx_r), - DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_tx_w), - DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_cts_r), - DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_rts_w), - DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_dcd_r), + DEVCB_DEVICE_LINE_MEMBER("acia6850_1", acia6850_device, write_rx), + DEVCB_DEVICE_LINE_MEMBER("acia6850_1", acia6850_device, write_dcd), DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_irq) }; -READ_LINE_MEMBER(mpu4vid_state::m68k_acia_rx_r) -{ - return m_m6809_m68k_line; -} - -WRITE_LINE_MEMBER(mpu4vid_state::m68k_acia_tx_w) -{ - m_m68k_m6809_line = state; -} - -READ_LINE_MEMBER(mpu4vid_state::m68k_acia_cts_r) -{ - return m_m68k_acia_cts; -} - -WRITE_LINE_MEMBER(mpu4vid_state::m68k_acia_rts_w) -{ - m_m6809_acia_dcd = state; -} - -READ_LINE_MEMBER(mpu4vid_state::m68k_acia_dcd_r) -{ - return m_m6809_acia_rts; -} - WRITE_LINE_MEMBER(mpu4vid_state::m68k_acia_irq) { - m_m6809_acia_cts = state; + m_acia_0->write_cts(state); m_m6850_irq_state = state; update_mpu68_interrupts(1); } @@ -422,11 +353,8 @@ static ACIA6850_INTERFACE( m68k_acia_if ) { 0, 0, - DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_rx_r), - DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_tx_w), - DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_cts_r), - DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_rts_w), - DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_dcd_r), + DEVCB_DEVICE_LINE_MEMBER("acia6850_0", acia6850_device, write_rx), + DEVCB_DEVICE_LINE_MEMBER("acia6850_0", acia6850_device, write_dcd), DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_irq) }; diff --git a/src/mame/includes/calomega.h b/src/mame/includes/calomega.h index 5d44ea21d45..1a0c6be4b6e 100644 --- a/src/mame/includes/calomega.h +++ b/src/mame/includes/calomega.h @@ -8,7 +8,6 @@ public: m_maincpu(*this, "maincpu") { } UINT8 m_tx_line; - UINT8 m_rx_line; int m_s903_mux_data; int m_s905_mux_data; required_shared_ptr m_videoram; @@ -35,7 +34,6 @@ public: DECLARE_WRITE8_MEMBER(lamps_903a_w); DECLARE_WRITE8_MEMBER(lamps_903b_w); DECLARE_WRITE8_MEMBER(lamps_905_w); - DECLARE_READ_LINE_MEMBER(acia_rx_r); DECLARE_WRITE_LINE_MEMBER(acia_tx_w); DECLARE_DRIVER_INIT(elgrande); DECLARE_DRIVER_INIT(standard); diff --git a/src/mame/includes/jpmsys5.h b/src/mame/includes/jpmsys5.h index 93a72f4838d..04da2f55f6e 100644 --- a/src/mame/includes/jpmsys5.h +++ b/src/mame/includes/jpmsys5.h @@ -18,12 +18,14 @@ public: jpmsys5_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), + acia6850_2(*this, "acia6850_2"), m_upd7759(*this, "upd7759"), m_tms34061(*this, "tms34061"), m_vfd(*this, "vfd"), m_direct_port(*this, "DIRECT") { } required_device m_maincpu; + required_device acia6850_2; required_device m_upd7759; optional_device m_tms34061; optional_device m_vfd; @@ -42,15 +44,9 @@ public: int m_muxram[255]; int m_alpha_clock; int m_chop; - UINT8 m_a0_acia_dcd; UINT8 m_a0_data_out; - UINT8 m_a0_data_in; - UINT8 m_a1_acia_dcd; UINT8 m_a1_data_out; - UINT8 m_a1_data_in; - UINT8 m_a2_acia_dcd; UINT8 m_a2_data_out; - UINT8 m_a2_data_in; DECLARE_WRITE16_MEMBER(sys5_tms34061_w); DECLARE_READ16_MEMBER(sys5_tms34061_r); DECLARE_WRITE16_MEMBER(ramdac_w); @@ -71,15 +67,9 @@ public: DECLARE_WRITE_LINE_MEMBER(u29_ca2_w); DECLARE_WRITE_LINE_MEMBER(u29_cb2_w); DECLARE_WRITE_LINE_MEMBER(acia_irq); - DECLARE_READ_LINE_MEMBER(a0_rx_r); DECLARE_WRITE_LINE_MEMBER(a0_tx_w); - DECLARE_READ_LINE_MEMBER(a0_dcd_r); - DECLARE_READ_LINE_MEMBER(a1_rx_r); DECLARE_WRITE_LINE_MEMBER(a1_tx_w); - DECLARE_READ_LINE_MEMBER(a1_dcd_r); - DECLARE_READ_LINE_MEMBER(a2_rx_r); DECLARE_WRITE_LINE_MEMBER(a2_tx_w); - DECLARE_READ_LINE_MEMBER(a2_dcd_r); DECLARE_READ16_MEMBER(mux_awp_r); DECLARE_READ16_MEMBER(coins_awp_r); void sys5_draw_lamps(); diff --git a/src/mess/drivers/68ksbc.c b/src/mess/drivers/68ksbc.c index ded54f5648d..f9a17899cde 100644 --- a/src/mess/drivers/68ksbc.c +++ b/src/mess/drivers/68ksbc.c @@ -66,11 +66,8 @@ static ACIA6850_INTERFACE( acia_intf ) { 153600, 153600, - DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx), DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx), - DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, cts_r), DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w), - DEVCB_NULL, DEVCB_NULL }; @@ -80,7 +77,10 @@ static MACHINE_CONFIG_START( c68ksbc, c68ksbc_state ) MCFG_CPU_PROGRAM_MAP(c68ksbc_mem) MCFG_ACIA6850_ADD("acia", acia_intf) + MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "serial_terminal") + MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rx)) + MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts)) MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mess/drivers/atarist.c b/src/mess/drivers/atarist.c index b2365c76a1d..1149df400a4 100644 --- a/src/mess/drivers/atarist.c +++ b/src/mess/drivers/atarist.c @@ -594,7 +594,7 @@ WRITE8_MEMBER( st_state::ikbd_port2_w ) m_ikbd_joy = BIT(data, 0); // serial transmit - m_ikbd_rx = BIT(data, 4); + m_acia0->write_rx(BIT(data, 4)); } @@ -1822,11 +1822,6 @@ static const ay8910_interface stbook_psg_intf = // ACIA6850_INTERFACE( acia_ikbd_intf ) //------------------------------------------------- -READ_LINE_MEMBER( st_state::ikbd_rx_r ) -{ - return m_ikbd_rx; -} - WRITE_LINE_MEMBER( st_state::ikbd_tx_w ) { m_ikbd_tx = state; @@ -1843,11 +1838,8 @@ static ACIA6850_INTERFACE( acia_ikbd_intf ) { Y2/64, Y2/64, - DEVCB_DRIVER_LINE_MEMBER(st_state, ikbd_rx_r), DEVCB_DRIVER_LINE_MEMBER(st_state, ikbd_tx_w), DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, DEVCB_DRIVER_LINE_MEMBER(st_state, acia_ikbd_irq_w) }; @@ -1860,11 +1852,8 @@ static ACIA6850_INTERFACE( stbook_acia_ikbd_intf ) { U517/2/16, // 500kHz U517/2/2, // 1MHZ - DEVCB_DRIVER_LINE_MEMBER(st_state, ikbd_rx_r), DEVCB_DRIVER_LINE_MEMBER(st_state, ikbd_tx_w), DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, DEVCB_DRIVER_LINE_MEMBER(st_state, acia_ikbd_irq_w) }; @@ -1873,16 +1862,6 @@ static ACIA6850_INTERFACE( stbook_acia_ikbd_intf ) // ACIA6850_INTERFACE( acia_midi_intf ) //------------------------------------------------- -READ_LINE_MEMBER( st_state::midi_rx_in ) -{ - return m_midi_rx_state; -} - -WRITE_LINE_MEMBER( st_state::midi_tx_out ) -{ - m_mdout->tx(state); -} - WRITE_LINE_MEMBER( st_state::acia_midi_irq_w ) { m_acia_midi_irq = state; @@ -1894,10 +1873,7 @@ static ACIA6850_INTERFACE( acia_midi_intf ) { Y2/64, 0, // rx clock (we manually clock rx) - DEVCB_DRIVER_LINE_MEMBER(st_state, midi_rx_in), - DEVCB_DRIVER_LINE_MEMBER(st_state, midi_tx_out), - DEVCB_NULL, - DEVCB_NULL, + DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx), DEVCB_NULL, DEVCB_DRIVER_LINE_MEMBER(st_state, acia_midi_irq_w) }; @@ -2152,7 +2128,7 @@ SLOT_INTERFACE_END WRITE_LINE_MEMBER( st_state::midi_rx_w ) { - m_midi_rx_state = state; + m_acia1->write_rx(state); for (int i = 0; i < 64; i++) // divider is set to 64 { @@ -2239,10 +2215,8 @@ void st_state::state_save() save_item(NAME(m_ikbd_mouse_px)); save_item(NAME(m_ikbd_mouse_py)); save_item(NAME(m_ikbd_mouse_pc)); - save_item(NAME(m_ikbd_rx)); save_item(NAME(m_ikbd_tx)); save_item(NAME(m_ikbd_joy)); - save_item(NAME(m_midi_rx)); save_item(NAME(m_midi_tx)); save_item(NAME(m_acia_ikbd_irq)); save_item(NAME(m_acia_midi_irq)); @@ -2618,10 +2592,10 @@ static MACHINE_CONFIG_START( stbook, stbook_state ) MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, centronics_intf) MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL, NULL) - MCFG_SERIAL_PORT_ADD("mdin", midiin_slot, "midiin", NULL) + MCFG_SERIAL_PORT_ADD("mdin", midiin_slot, "midiin") MCFG_SERIAL_OUT_RX_HANDLER(WRITELINE(st_state, midi_rx_w)) - MCFG_SERIAL_PORT_ADD("mdout", midiout_slot, "midiout", NULL) + MCFG_SERIAL_PORT_ADD("mdout", midiout_slot, "midiout") // cartridge MCFG_CARTSLOT_ADD("cart") diff --git a/src/mess/drivers/bbc.c b/src/mess/drivers/bbc.c index 537df17240c..3f4b113e86b 100644 --- a/src/mess/drivers/bbc.c +++ b/src/mess/drivers/bbc.c @@ -555,11 +555,8 @@ static ACIA6850_INTERFACE( bbc_acia6850_interface ) { 0, 0, - DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbc_rxd_r), DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbc_txd_w), - DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbc_cts_r), DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbc_rts_w), - DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbc_dcd_r), DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbcb_acia6850_irq_w) }; @@ -697,6 +694,9 @@ static MACHINE_CONFIG_START( bbca, bbc_state ) /* acia */ MCFG_ACIA6850_ADD("acia6850", bbc_acia6850_interface) MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL) + MCFG_SERIAL_OUT_RX_HANDLER(WRITELINE(bbc_state, write_rxd_serial)) + MCFG_RS232_OUT_DCD_HANDLER(WRITELINE(bbc_state, write_dcd_serial)) + MCFG_RS232_OUT_CTS_HANDLER(WRITELINE(bbc_state, write_cts_serial)) /* devices */ MCFG_VIA6522_ADD("via6522_0", 1000000, bbcb_system_via) @@ -884,6 +884,9 @@ static MACHINE_CONFIG_START( bbcm, bbc_state ) /* acia */ MCFG_ACIA6850_ADD("acia6850", bbc_acia6850_interface) MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL) + MCFG_SERIAL_OUT_RX_HANDLER(WRITELINE(bbc_state, write_rxd_serial)) + MCFG_RS232_OUT_DCD_HANDLER(WRITELINE(bbc_state, write_dcd_serial)) + MCFG_RS232_OUT_CTS_HANDLER(WRITELINE(bbc_state, write_cts_serial)) /* devices */ MCFG_UPD7002_ADD("upd7002", bbc_uPD7002) diff --git a/src/mess/drivers/bml3.c b/src/mess/drivers/bml3.c index aeea26f8e24..ab6a58cfc42 100644 --- a/src/mess/drivers/bml3.c +++ b/src/mess/drivers/bml3.c @@ -105,11 +105,8 @@ public: DECLARE_WRITE8_MEMBER(bml3bus_irq_w); DECLARE_WRITE8_MEMBER(bml3bus_firq_w); - DECLARE_READ_LINE_MEMBER( bml3_acia_rx_r ); DECLARE_WRITE_LINE_MEMBER( bml3_acia_tx_w ); - DECLARE_READ_LINE_MEMBER( bml3_acia_dts_r ); DECLARE_WRITE_LINE_MEMBER( bml3_acia_rts_w ); - DECLARE_READ_LINE_MEMBER(bml3_acia_dcd_r); DECLARE_WRITE_LINE_MEMBER(bml3_acia_irq_w); DECLARE_READ8_MEMBER(bml3_a000_r); DECLARE_WRITE8_MEMBER(bml3_a000_w); @@ -925,35 +922,17 @@ static const pia6821_interface bml3_pia_config = }; -READ_LINE_MEMBER( bml3_state::bml3_acia_rx_r ) -{ - logerror("TAPE R\n"); - return 1; -} - WRITE_LINE_MEMBER( bml3_state::bml3_acia_tx_w ) { logerror("%02x TAPE\n",state); } -READ_LINE_MEMBER( bml3_state::bml3_acia_dts_r ) -{ - logerror("TAPE R DTS\n"); - return 1; -} - WRITE_LINE_MEMBER( bml3_state::bml3_acia_rts_w ) { logerror("%02x TAPE RTS\n",state); } -READ_LINE_MEMBER( bml3_state::bml3_acia_dcd_r ) -{ - logerror("TAPE R DCD\n"); - return 1; -} - WRITE_LINE_MEMBER( bml3_state::bml3_acia_irq_w ) { logerror("%02x TAPE IRQ\n",state); @@ -964,11 +943,8 @@ static ACIA6850_INTERFACE( bml3_acia_if ) { 600, 600, - DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_rx_r), DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_tx_w), - DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_dts_r), DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_rts_w), - DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_dcd_r), DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_irq_w) }; diff --git a/src/mess/drivers/cat.c b/src/mess/drivers/cat.c index 6f879f1d6de..b56742619a4 100644 --- a/src/mess/drivers/cat.c +++ b/src/mess/drivers/cat.c @@ -1308,9 +1308,7 @@ static const acia6850_interface swyft_acia_config = 3579545, // guess DEVCB_NULL, DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, + DEVCB_NULL }; static const via6522_interface swyft_via0_config = diff --git a/src/mess/drivers/ec65.c b/src/mess/drivers/ec65.c index e85c285b4c0..99f38dd6163 100644 --- a/src/mess/drivers/ec65.c +++ b/src/mess/drivers/ec65.c @@ -92,9 +92,6 @@ static ACIA6850_INTERFACE( ec65_acia_intf ) 0, DEVCB_NULL, DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, DEVCB_NULL }; diff --git a/src/mess/drivers/mekd2.c b/src/mess/drivers/mekd2.c index 351b02b5093..172e3a6b84e 100644 --- a/src/mess/drivers/mekd2.c +++ b/src/mess/drivers/mekd2.c @@ -106,7 +106,6 @@ public: DECLARE_WRITE8_MEMBER(mekd2_digit_w); DECLARE_WRITE8_MEMBER(mekd2_segment_w); DECLARE_DEVICE_IMAGE_LOAD_MEMBER(mekd2_cart); - DECLARE_READ_LINE_MEMBER(cass_r); DECLARE_WRITE_LINE_MEMBER(cass_w); TIMER_DEVICE_CALLBACK_MEMBER(mekd2_c); TIMER_DEVICE_CALLBACK_MEMBER(mekd2_p); @@ -327,11 +326,6 @@ static const pia6821_interface mekd2_u_mc6821_intf = DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE) /* IRQB output */ }; -READ_LINE_MEMBER( mekd2_state::cass_r ) -{ - return (bool)m_cass_data[2]; -} - WRITE_LINE_MEMBER( mekd2_state::cass_w ) { m_cass_state = state; @@ -341,11 +335,8 @@ static ACIA6850_INTERFACE( mekd2_acia_intf ) { XTAL_MEKD2 / 256, /* tx clock 4800Hz */ 300, /* rx clock line, toggled by cassette circuit */ - DEVCB_DRIVER_LINE_MEMBER(mekd2_state, cass_r), /* in rxd func */ DEVCB_DRIVER_LINE_MEMBER(mekd2_state, cass_w), /* out txd func */ - DEVCB_NULL, /* in cts func */ - DEVCB_NULL, /* out rts func */ - DEVCB_NULL, /* in dcd func */ + DEVCB_NULL, // cts DEVCB_NULL /* out irq func NOT USED */ }; @@ -393,7 +384,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(mekd2_state::mekd2_p) if (cass_ws != m_cass_data[0]) { m_cass_data[0] = cass_ws; - m_cass_data[2] = ((m_cass_data[1] < 12) ? 1 : 0); + m_acia->write_rx((m_cass_data[1] < 12) ? 1 : 0); m_cass_data[1] = 0; } } diff --git a/src/mess/drivers/mirage.c b/src/mess/drivers/mirage.c index 8072d223682..25f395860fb 100644 --- a/src/mess/drivers/mirage.c +++ b/src/mess/drivers/mirage.c @@ -284,11 +284,8 @@ static ACIA6850_INTERFACE( mirage_acia6850_interface ) { 0, // tx clock 0, // rx clock - DEVCB_NULL, // rx in DEVCB_NULL, // rx out - DEVCB_NULL, // cts in DEVCB_NULL, // rts out - DEVCB_NULL, // dcd in DEVCB_DRIVER_LINE_MEMBER(mirage_state, acia_irq_w) }; diff --git a/src/mess/drivers/newbrain.c b/src/mess/drivers/newbrain.c index 3e714ab9231..cafc29733ed 100644 --- a/src/mess/drivers/newbrain.c +++ b/src/mess/drivers/newbrain.c @@ -1153,11 +1153,6 @@ INPUT_PORTS_END /* Machine Initialization */ -READ_LINE_MEMBER( newbrain_eim_state::acia_rx ) -{ - return m_acia_rxd; -} - WRITE_LINE_MEMBER( newbrain_eim_state::acia_tx ) { m_acia_txd = state; @@ -1172,11 +1167,8 @@ static ACIA6850_INTERFACE( acia_intf ) { 0, 0, - DEVCB_DRIVER_LINE_MEMBER(newbrain_eim_state, acia_rx), DEVCB_DRIVER_LINE_MEMBER(newbrain_eim_state, acia_tx), DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, DEVCB_DRIVER_LINE_MEMBER(newbrain_eim_state, acia_interrupt) }; diff --git a/src/mess/drivers/ob68k1a.c b/src/mess/drivers/ob68k1a.c index 79d2a75fdbb..8a06008f0f9 100644 --- a/src/mess/drivers/ob68k1a.c +++ b/src/mess/drivers/ob68k1a.c @@ -215,11 +215,8 @@ static ACIA6850_INTERFACE( acia0_intf ) { 0, 0, - DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx), DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx), - DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, cts_r), DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w), - DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dcd_r), DEVCB_NULL }; @@ -232,11 +229,8 @@ static ACIA6850_INTERFACE( acia1_intf ) { 0, 0, - DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, rx), DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx), - DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, cts_r), DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w), - DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dcd_r), DEVCB_NULL, }; @@ -318,8 +312,16 @@ static MACHINE_CONFIG_START( ob68k1a, ob68k1a_state ) MCFG_ACIA6850_ADD(MC6850_0_TAG, acia0_intf) MCFG_ACIA6850_ADD(MC6850_1_TAG, acia1_intf) MCFG_COM8116_ADD(COM8116_TAG, XTAL_5_0688MHz, NULL, WRITELINE(ob68k1a_state, rx_tx_0_w), WRITELINE(ob68k1a_state, rx_tx_1_w)) + MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, "serial_terminal") + MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(MC6850_0_TAG, acia6850_device, write_rx)) + MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(MC6850_0_TAG, acia6850_device, write_dcd)) + MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(MC6850_0_TAG, acia6850_device, write_cts)) + MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL) + MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(MC6850_1_TAG, acia6850_device, write_rx)) + MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(MC6850_1_TAG, acia6850_device, write_dcd)) + MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(MC6850_1_TAG, acia6850_device, write_cts)) // internal ram MCFG_RAM_ADD(RAM_TAG) diff --git a/src/mess/drivers/osi.c b/src/mess/drivers/osi.c index 859c5ebc0e5..77e2a157baf 100644 --- a/src/mess/drivers/osi.c +++ b/src/mess/drivers/osi.c @@ -644,11 +644,6 @@ INPUT_PORTS_END /* Machine Start */ -READ_LINE_MEMBER( sb2m600_state::cassette_rx ) -{ - return ((m_cassette)->input() > 0.0) ? 1 : 0; -} - WRITE_LINE_MEMBER( sb2m600_state::cassette_tx ) { m_cassette->output(state ? +1.0 : -1.0); @@ -658,11 +653,8 @@ static ACIA6850_INTERFACE( osi600_acia_intf ) { X1/32, X1/32, - DEVCB_DRIVER_LINE_MEMBER(sb2m600_state, cassette_rx), DEVCB_DRIVER_LINE_MEMBER(sb2m600_state, cassette_tx), DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, DEVCB_NULL }; @@ -670,11 +662,8 @@ static ACIA6850_INTERFACE( uk101_acia_intf ) { 500000, // 500000, // - DEVCB_DRIVER_LINE_MEMBER(sb2m600_state, cassette_rx), DEVCB_DRIVER_LINE_MEMBER(sb2m600_state, cassette_tx), DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, DEVCB_NULL }; @@ -684,9 +673,6 @@ static ACIA6850_INTERFACE( osi470_acia_intf ) XTAL_4MHz/8, // 250 kHz DEVCB_NULL, DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, DEVCB_NULL }; @@ -935,6 +921,9 @@ void sb2m600_state::device_timer(emu_timer &timer, device_timer_id id, int param { switch (id) { + case TIMER_CASSETTE: + m_acia_0->write_rx(((m_cassette)->input() > 0.0) ? 1 : 0); + break; case TIMER_SETUP_BEEP: m_beeper->set_state(0); m_beeper->set_frequency(300); @@ -947,6 +936,8 @@ void sb2m600_state::device_timer(emu_timer &timer, device_timer_id id, int param DRIVER_INIT_MEMBER(c1p_state,c1p) { timer_set(attotime::zero, TIMER_SETUP_BEEP); + m_cassette_timer = timer_alloc(TIMER_CASSETTE); + m_cassette_timer->adjust(attotime::from_hz(44100), 0, attotime::from_hz(44100)); } diff --git a/src/mess/drivers/poly.c b/src/mess/drivers/poly.c index 93538913a9f..1878eee9552 100644 --- a/src/mess/drivers/poly.c +++ b/src/mess/drivers/poly.c @@ -161,11 +161,8 @@ static ACIA6850_INTERFACE( acia_intf ) { 1, 1, - DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx), DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx), - DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, cts_r), DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w), - DEVCB_NULL, DEVCB_NULL }; diff --git a/src/mess/drivers/tavernie.c b/src/mess/drivers/tavernie.c index 02340ec8465..9d7331c18dc 100644 --- a/src/mess/drivers/tavernie.c +++ b/src/mess/drivers/tavernie.c @@ -334,11 +334,8 @@ static ACIA6850_INTERFACE( mc6850_intf ) { 153600, 153600, - DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx), DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx), - DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, cts_r), DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w), - DEVCB_NULL, DEVCB_NULL }; @@ -367,7 +364,11 @@ static MACHINE_CONFIG_START( cpu09, tavernie_state ) /* Devices */ MCFG_CASSETTE_ADD( "cassette", default_cassette_interface ) + MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "serial_terminal") + MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rx)) + MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts)) + MCFG_PIA6821_ADD("pia", mc6821_intf) MCFG_PTM6840_ADD("ptm", mc6840_intf) MCFG_ACIA6850_ADD("acia", mc6850_intf) diff --git a/src/mess/drivers/tek405x.c b/src/mess/drivers/tek405x.c index 00aa1e5adec..ffec5ffdb81 100644 --- a/src/mess/drivers/tek405x.c +++ b/src/mess/drivers/tek405x.c @@ -1114,9 +1114,6 @@ static ACIA6850_INTERFACE( acia_intf ) 0, DEVCB_NULL, DEVCB_NULL, - DEVCB_LINE_GND, - DEVCB_NULL, - DEVCB_LINE_GND, DEVCB_DRIVER_LINE_MEMBER(tek4051_state, acia_irq_w) }; diff --git a/src/mess/drivers/v6809.c b/src/mess/drivers/v6809.c index 454aedbd85a..4417e1bd9a2 100644 --- a/src/mess/drivers/v6809.c +++ b/src/mess/drivers/v6809.c @@ -337,9 +337,6 @@ static ACIA6850_INTERFACE( mc6850_intf ) 10, DEVCB_NULL, DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, DEVCB_NULL }; diff --git a/src/mess/drivers/votrtnt.c b/src/mess/drivers/votrtnt.c index 5e213467c04..a54a6684643 100644 --- a/src/mess/drivers/votrtnt.c +++ b/src/mess/drivers/votrtnt.c @@ -93,11 +93,8 @@ static ACIA6850_INTERFACE( acia_intf ) { 153600, 153600, - DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx), DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx), - DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, cts_r), DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w), - DEVCB_NULL, DEVCB_NULL }; @@ -120,7 +117,10 @@ static MACHINE_CONFIG_START( votrtnt, votrtnt_state ) /* serial hardware */ MCFG_ACIA6850_ADD("acia", acia_intf) + MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "serial_terminal") + MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rx)) + MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts)) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mess/includes/atarist.h b/src/mess/includes/atarist.h index e264a0508bb..12698948f44 100644 --- a/src/mess/includes/atarist.h +++ b/src/mess/includes/atarist.h @@ -87,11 +87,11 @@ public: m_maincpu(*this, M68000_TAG), m_fdc(*this, WD1772_TAG), m_mfp(*this, MC68901_TAG), + m_acia0(*this, MC6850_0_TAG), m_acia1(*this, MC6850_1_TAG), m_centronics(*this, CENTRONICS_TAG), m_ram(*this, RAM_TAG), m_rs232(*this, RS232_TAG), - m_mdout(*this, "mdout"), m_p31(*this, "P31"), m_p32(*this, "P32"), m_p33(*this, "P33"), @@ -125,11 +125,11 @@ public: required_device m_maincpu; required_device m_fdc; required_device m_mfp; + required_device m_acia0; required_device m_acia1; required_device m_centronics; required_device m_ram; required_device m_rs232; - required_device m_mdout; required_ioport m_p31; required_ioport m_p32; required_ioport m_p33; @@ -231,11 +231,8 @@ public: DECLARE_WRITE8_MEMBER( psg_pa_w ); - DECLARE_READ_LINE_MEMBER( ikbd_rx_r ); DECLARE_WRITE_LINE_MEMBER( ikbd_tx_w ); DECLARE_WRITE_LINE_MEMBER( acia_ikbd_irq_w ); - DECLARE_READ_LINE_MEMBER( midi_rx_in ); - DECLARE_WRITE_LINE_MEMBER( midi_tx_out ); DECLARE_WRITE_LINE_MEMBER( acia_midi_irq_w ); DECLARE_READ8_MEMBER( mfp_gpio_r ); @@ -254,9 +251,6 @@ public: /* memory state */ UINT8 m_mmu; - // MIDI state - int m_midi_rx_state; - /* keyboard state */ int m_acia_ikbd_irq; int m_acia_midi_irq; @@ -267,10 +261,8 @@ public: UINT8 m_ikbd_mouse_px; UINT8 m_ikbd_mouse_py; UINT8 m_ikbd_mouse_pc; - int m_ikbd_rx; int m_ikbd_tx; int m_ikbd_joy; - int m_midi_rx; int m_midi_tx; /* floppy state */ diff --git a/src/mess/includes/bbc.h b/src/mess/includes/bbc.h index 00e7a5d65e5..1031d71ed3e 100644 --- a/src/mess/includes/bbc.h +++ b/src/mess/includes/bbc.h @@ -175,6 +175,9 @@ public: int m_len3; int m_mc6850_clock; UINT8 m_serproc_data; + int m_rxd_serial; + int m_dcd_serial; + int m_cts_serial; int m_dcd_cass; int m_rxd_cass; int m_cass_out_enabled; @@ -340,11 +343,14 @@ public: DECLARE_WRITE_LINE_MEMBER(bbc_wd177x_intrq_w); DECLARE_WRITE_LINE_MEMBER(bbc_wd177x_drq_w); DECLARE_WRITE_LINE_MEMBER(bbc_vsync); - DECLARE_READ_LINE_MEMBER(bbc_rxd_r); - DECLARE_READ_LINE_MEMBER(bbc_dcd_r); - DECLARE_READ_LINE_MEMBER(bbc_cts_r); + void update_acia_rxd(); + void update_acia_dcd(); + void update_acia_cts(); DECLARE_WRITE_LINE_MEMBER(bbc_rts_w); DECLARE_WRITE_LINE_MEMBER(bbc_txd_w); + DECLARE_WRITE_LINE_MEMBER(write_rxd_serial); + DECLARE_WRITE_LINE_MEMBER(write_dcd_serial); + DECLARE_WRITE_LINE_MEMBER(write_cts_serial); DECLARE_INPUT_CHANGED_MEMBER( trigger_reset ); DECLARE_DEVICE_IMAGE_LOAD_MEMBER( bbcb_cart ); diff --git a/src/mess/includes/newbrain.h b/src/mess/includes/newbrain.h index ab45c392fb3..0a9906baf86 100644 --- a/src/mess/includes/newbrain.h +++ b/src/mess/includes/newbrain.h @@ -164,7 +164,6 @@ public: int m_bee; // identity UINT8 m_enrg1; // enable register 1 UINT8 m_enrg2; // enable register 2 - int m_acia_rxd; // ACIA receive int m_acia_txd; // ACIA transmit // COP420 state @@ -239,7 +238,6 @@ public: DECLARE_READ8_MEMBER( usbs_r ); DECLARE_WRITE8_MEMBER( usbs_w ); DECLARE_WRITE8_MEMBER( paging_w ); - DECLARE_READ_LINE_MEMBER( acia_rx ); DECLARE_WRITE_LINE_MEMBER( acia_tx ); DECLARE_WRITE_LINE_MEMBER( acia_interrupt ); DECLARE_WRITE_LINE_MEMBER( fdc_interrupt ); diff --git a/src/mess/includes/osi.h b/src/mess/includes/osi.h index 04a16a44836..d56dec945cb 100644 --- a/src/mess/includes/osi.h +++ b/src/mess/includes/osi.h @@ -30,12 +30,14 @@ class sb2m600_state : public driver_device public: enum { + TIMER_CASSETTE, TIMER_SETUP_BEEP }; sb2m600_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, M6502_TAG), + m_acia_0(*this, "acia_0"), m_cassette(*this, "cassette"), m_discrete(*this, DISCRETE_TAG), m_ram(*this, RAM_TAG), @@ -60,7 +62,6 @@ public: DECLARE_READ8_MEMBER( keyboard_r ); DECLARE_WRITE8_MEMBER( keyboard_w ); DECLARE_WRITE8_MEMBER( ctrl_w ); - DECLARE_READ_LINE_MEMBER( cassette_rx ); DECLARE_WRITE_LINE_MEMBER( cassette_tx ); /* keyboard state */ @@ -78,6 +79,7 @@ public: DECLARE_PALETTE_INIT(osi630); required_device m_maincpu; + required_device m_acia_0; required_device m_cassette; optional_device m_discrete; required_device m_ram; @@ -94,6 +96,7 @@ public: required_ioport m_io_sound; required_ioport m_io_reset; optional_device m_beeper; + emu_timer *m_cassette_timer; protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); diff --git a/src/mess/includes/thomson.h b/src/mess/includes/thomson.h index b9d14a0c301..60fc32e162c 100644 --- a/src/mess/includes/thomson.h +++ b/src/mess/includes/thomson.h @@ -137,7 +137,6 @@ public: DECLARE_WRITE8_MEMBER( to7_io_portb_out ); DECLARE_WRITE8_MEMBER( to7_io_cb2_out ); DECLARE_WRITE_LINE_MEMBER( to7_modem_cb ); - DECLARE_READ_LINE_MEMBER( to7_modem_rx_r ); DECLARE_WRITE_LINE_MEMBER( to7_modem_tx_w ); DECLARE_READ8_MEMBER( to7_modem_mea8000_r ); DECLARE_WRITE8_MEMBER( to7_modem_mea8000_w ); @@ -339,7 +338,6 @@ protected: UINT8 m_thom_cart_bank; /* current bank */ UINT8 m_to7_lightpen_step; UINT8 m_to7_lightpen; - UINT8 m_to7_modem_rx; UINT8 m_to7_modem_tx; /* calls to7_game_update_cb periodically */ emu_timer* m_to7_game_timer; diff --git a/src/mess/machine/bbc.c b/src/mess/machine/bbc.c index 1d10857b366..d78be75bced 100644 --- a/src/mess/machine/bbc.c +++ b/src/mess/machine/bbc.c @@ -1297,6 +1297,7 @@ const uPD7002_interface bbc_uPD7002 = void bbc_state::MC6850_Receive_Clock(int new_clock) { m_rxd_cass = new_clock; + update_acia_rxd(); // // Somehow the "serial processor" generates 16 clock signals towards @@ -1366,6 +1367,7 @@ TIMER_CALLBACK_MEMBER(bbc_state::bbc_tape_timer_cb) logerror ("Cassette length %d\n",m_wav_len); m_nr_high_tones = 0; m_dcd_cass = 0; + update_acia_dcd(); m_len0=0; m_len1=0; m_len2=0; @@ -1387,6 +1389,7 @@ TIMER_CALLBACK_MEMBER(bbc_state::bbc_tape_timer_cb) logerror("Serial value 0\n"); m_nr_high_tones = 0; m_dcd_cass = 0; + update_acia_dcd(); MC6850_Receive_Clock(0); m_len0=0; m_len1=0; @@ -1402,6 +1405,7 @@ TIMER_CALLBACK_MEMBER(bbc_state::bbc_tape_timer_cb) if ( m_nr_high_tones > 100 ) { m_dcd_cass = 1; + update_acia_dcd(); } MC6850_Receive_Clock(1); m_len0=0; @@ -1416,22 +1420,39 @@ TIMER_CALLBACK_MEMBER(bbc_state::bbc_tape_timer_cb) } } - -READ_LINE_MEMBER( bbc_state::bbc_rxd_r ) +WRITE_LINE_MEMBER( bbc_state::write_rxd_serial ) { - return ( m_serproc_data & 0x40 ) ? m_rs232->rx() : m_rxd_cass; + m_rxd_serial = state; + update_acia_rxd(); +} + +void bbc_state::update_acia_rxd() +{ + m_acia->write_rx(( m_serproc_data & 0x40 ) ? m_rxd_serial : m_rxd_cass); } -READ_LINE_MEMBER( bbc_state::bbc_dcd_r ) +WRITE_LINE_MEMBER( bbc_state::write_dcd_serial ) { - return ( m_serproc_data & 0x40 ) ? m_rs232->dcd_r() : m_dcd_cass; + m_dcd_serial = state; + update_acia_dcd(); +} + +void bbc_state::update_acia_dcd() +{ + m_acia->write_dcd(( m_serproc_data & 0x40 ) ? m_dcd_serial : m_dcd_cass); } -READ_LINE_MEMBER( bbc_state::bbc_cts_r ) +WRITE_LINE_MEMBER( bbc_state::write_cts_serial ) { - return ( m_serproc_data & 0x40 ) ? m_rs232->cts_r() : 0; + m_cts_serial = state; + update_acia_cts(); +} + +void bbc_state::update_acia_cts() +{ + m_acia->write_cts(( m_serproc_data & 0x40 ) ? m_cts_serial : 0); } @@ -1516,6 +1537,9 @@ WRITE8_MEMBER(bbc_state::bbc_SerialULA_w) }; m_serproc_data = data; + update_acia_rxd(); + update_acia_dcd(); + update_acia_cts(); BBC_Cassette_motor(m_serproc_data & 0x80); // Set transmit clock rate diff --git a/src/mess/machine/isa_gus.c b/src/mess/machine/isa_gus.c index 3af65916336..6963f074d54 100644 --- a/src/mess/machine/isa_gus.c +++ b/src/mess/machine/isa_gus.c @@ -1200,18 +1200,12 @@ void gf1_device::eop_w(int state) /* 16-bit ISA card device implementation */ -static const acia6850_interface gus_midi_interface = +static ACIA6850_INTERFACE(gus_midi_interface) { 31250 * 16, 0, - - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, isa16_gus_device, rx_in), // rx in - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, isa16_gus_device, tx_out), // tx out - + DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx), DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER,isa16_gus_device,midi_irq) }; @@ -1290,7 +1284,6 @@ void isa16_gus_device::device_start() { m_gf1 = subdevice("gf1"); m_midi = subdevice("midi"); - m_mdout = subdevice("mdout"); set_isa_device(); m_isa->install_device(0x0200, 0x0201, 0, 0, read8_delegate(FUNC(isa16_gus_device::joy_r),this), write8_delegate(FUNC(isa16_gus_device::joy_w),this) ); m_isa->install_device(0x0220, 0x022f, 0, 0, read8_delegate(FUNC(isa16_gus_device::board_r),this), write8_delegate(FUNC(isa16_gus_device::board_w),this) ); @@ -1712,23 +1705,13 @@ WRITE_LINE_MEMBER( isa16_gus_device::midi_irq ) WRITE_LINE_MEMBER( isa16_gus_device::midi_rx_w ) { - m_rx_state = state; + m_midi->write_rx(state); for (int i = 0; i < 16; i++) // divider is set to 16 { m_midi->rx_clock_in(); } } -READ_LINE_MEMBER( isa16_gus_device::rx_in ) -{ - return m_rx_state; -} - -WRITE_LINE_MEMBER( isa16_gus_device::tx_out ) -{ - m_mdout->tx(state); -} - WRITE_LINE_MEMBER( isa16_gus_device::nmi_w) { m_irq_status |= IRQ_SB; diff --git a/src/mess/machine/isa_gus.h b/src/mess/machine/isa_gus.h index 1027eeaa5c5..106d66ee9da 100644 --- a/src/mess/machine/isa_gus.h +++ b/src/mess/machine/isa_gus.h @@ -255,8 +255,6 @@ public: DECLARE_WRITE_LINE_MEMBER(drq2_w); DECLARE_WRITE_LINE_MEMBER(nmi_w); DECLARE_WRITE_LINE_MEMBER( midi_rx_w ); - DECLARE_READ_LINE_MEMBER( rx_in ); - DECLARE_WRITE_LINE_MEMBER( tx_out ); // DMA overrides virtual UINT8 dack_r(int line); @@ -274,11 +272,9 @@ protected: private: gf1_device* m_gf1; acia6850_device* m_midi; - serial_port_device* m_mdout; UINT8 m_irq_status; attotime m_joy_time; - int m_rx_state; }; // device type definition diff --git a/src/mess/machine/thomson.c b/src/mess/machine/thomson.c index 734a1bcfe9e..c865d3678ab 100644 --- a/src/mess/machine/thomson.c +++ b/src/mess/machine/thomson.c @@ -826,11 +826,6 @@ const pia6821_interface to7_pia6821_modem = DEVCB_NULL }; -READ_LINE_MEMBER( thomson_state::to7_modem_rx_r ) -{ - return m_to7_modem_rx; -} - WRITE_LINE_MEMBER( thomson_state::to7_modem_tx_w ) { m_to7_modem_tx = state; @@ -840,11 +835,8 @@ ACIA6850_INTERFACE( to7_modem ) { 1200, 1200, /* 1200 bauds, might be divided by 16 */ - DEVCB_DRIVER_LINE_MEMBER(thomson_state, to7_modem_rx_r), /*&to7_modem_rx,*/ DEVCB_DRIVER_LINE_MEMBER(thomson_state, to7_modem_tx_w), /*&to7_modem_tx,*/ DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, DEVCB_DRIVER_LINE_MEMBER(thomson_state, to7_modem_cb) }; @@ -853,7 +845,7 @@ ACIA6850_INTERFACE( to7_modem ) void thomson_state::to7_modem_reset() { LOG (( "to7_modem_reset called\n" )); - m_to7_modem_rx = 0; + m_acia->write_rx(0); m_to7_modem_tx = 0; /* pia_reset() is called in machine_reset */ /* acia_6850 has no reset (?) */ @@ -864,7 +856,6 @@ void thomson_state::to7_modem_reset() void thomson_state::to7_modem_init() { LOG (( "to7_modem_init: MODEM not implemented!\n" )); - save_item(NAME(m_to7_modem_rx)); save_item(NAME(m_to7_modem_tx)); }