From 556312c031c94cf02d7d4b7a7b26b140f8f2ecbd Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 19 Mar 2018 14:27:46 -0400 Subject: Add DEC 12-15336-00 RS232 loopback connector type (required for VT102 modem control self-test) rs232: Add speed select output (nw) --- src/devices/bus/rs232/loopback.cpp | 52 ++++++++++++++++++++++++++++++++++++++ src/devices/bus/rs232/loopback.h | 16 ++++++++++++ src/devices/bus/rs232/rs232.cpp | 7 +++++ src/devices/bus/rs232/rs232.h | 2 ++ src/mame/drivers/ccs2810.cpp | 2 +- src/mame/drivers/vt100.cpp | 4 ++- 6 files changed, 81 insertions(+), 2 deletions(-) diff --git a/src/devices/bus/rs232/loopback.cpp b/src/devices/bus/rs232/loopback.cpp index b91b7281346..de1f07f3cd7 100644 --- a/src/devices/bus/rs232/loopback.cpp +++ b/src/devices/bus/rs232/loopback.cpp @@ -42,3 +42,55 @@ WRITE_LINE_MEMBER( rs232_loopback_device::input_dtr ) output_dcd(state); } } + +DEFINE_DEVICE_TYPE(DEC_RS232_LOOPBACK, dec_rs232_loopback_device, "dec_rs232_loopback", "RS232 Loopback (DEC 12-15336-00)") + +dec_rs232_loopback_device::dec_rs232_loopback_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, DEC_RS232_LOOPBACK, tag, owner, clock) + , device_rs232_port_interface(mconfig, *this) +{ +} + +void dec_rs232_loopback_device::device_start() +{ +} + +WRITE_LINE_MEMBER( dec_rs232_loopback_device::input_txd ) +{ + // Pin 2 (Transmitted Data) connected to Pin 3 (Received Data) and Pin 15 (Transmission Clock) + if (started()) + { + output_rxd(state); + output_txc(state); + } +} + +WRITE_LINE_MEMBER( dec_rs232_loopback_device::input_rts ) +{ + // Pin 4 (Request to Send) connected to Pin 5 (Clear to Send) and Pin 8 (Carrier Detect) + if (started()) + { + output_cts(state); + output_dcd(state); + } +} + +WRITE_LINE_MEMBER( dec_rs232_loopback_device::input_dtr ) +{ + // Pin 20 (Data Terminal Ready) connected to Pin 6 (Data Set Ready) and 22 (Ring Indicator) + if (started()) + { + output_dsr(state); + output_ri(state); + } +} + +WRITE_LINE_MEMBER( dec_rs232_loopback_device::input_spds ) +{ + // Pin 19 (Speed Select) connected to Pin 12 (Speed Indicator) and 17 (Receive Clock) + if (started()) + { + output_si(state); + output_rxc(state); + } +} diff --git a/src/devices/bus/rs232/loopback.h b/src/devices/bus/rs232/loopback.h index 7c78a6317ad..82cd46913f2 100644 --- a/src/devices/bus/rs232/loopback.h +++ b/src/devices/bus/rs232/loopback.h @@ -22,6 +22,22 @@ protected: virtual void device_start() override; }; +class dec_rs232_loopback_device : public device_t, + public device_rs232_port_interface +{ +public: + dec_rs232_loopback_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual WRITE_LINE_MEMBER( input_txd ) override; + virtual WRITE_LINE_MEMBER( input_rts ) override; + virtual WRITE_LINE_MEMBER( input_dtr ) override; + virtual WRITE_LINE_MEMBER( input_spds ) override; + +protected: + virtual void device_start() override; +}; + extern const device_type RS232_LOOPBACK; +extern const device_type DEC_RS232_LOOPBACK; #endif // MAME_BUS_RS232_LOOPBACK_H diff --git a/src/devices/bus/rs232/rs232.cpp b/src/devices/bus/rs232/rs232.cpp index 3fad8eaeaac..c61bb9676fd 100644 --- a/src/devices/bus/rs232/rs232.cpp +++ b/src/devices/bus/rs232/rs232.cpp @@ -143,6 +143,12 @@ WRITE_LINE_MEMBER( rs232_port_device::write_etc ) m_dev->input_etc(state); } +WRITE_LINE_MEMBER( rs232_port_device::write_spds ) +{ + if (m_dev) + m_dev->input_spds(state); +} + device_rs232_port_interface::device_rs232_port_interface(const machine_config &mconfig, device_t &device) : device_slot_card_interface(mconfig, device) { @@ -165,6 +171,7 @@ device_rs232_port_interface::~device_rs232_port_interface() SLOT_INTERFACE_START( default_rs232_devices ) SLOT_INTERFACE("keyboard", SERIAL_KEYBOARD) SLOT_INTERFACE("loopback", RS232_LOOPBACK) + SLOT_INTERFACE("dec_loopback", DEC_RS232_LOOPBACK) SLOT_INTERFACE("null_modem", NULL_MODEM) SLOT_INTERFACE("printer", SERIAL_PRINTER) SLOT_INTERFACE("terminal", SERIAL_TERMINAL) diff --git a/src/devices/bus/rs232/rs232.h b/src/devices/bus/rs232/rs232.h index cc11cc76a85..b73a7d817bf 100644 --- a/src/devices/bus/rs232/rs232.h +++ b/src/devices/bus/rs232/rs232.h @@ -142,6 +142,7 @@ public: DECLARE_WRITE_LINE_MEMBER( write_dtr ); DECLARE_WRITE_LINE_MEMBER( write_rts ); DECLARE_WRITE_LINE_MEMBER( write_etc ); + DECLARE_WRITE_LINE_MEMBER( write_spds ); DECLARE_READ_LINE_MEMBER( rxd_r ) { return m_rxd; } DECLARE_READ_LINE_MEMBER( dcd_r ) { return m_dcd; } @@ -192,6 +193,7 @@ public: virtual DECLARE_WRITE_LINE_MEMBER( input_dtr ) { } virtual DECLARE_WRITE_LINE_MEMBER( input_rts ) { } virtual DECLARE_WRITE_LINE_MEMBER( input_etc ) { } + virtual DECLARE_WRITE_LINE_MEMBER( input_spds ) { } DECLARE_WRITE_LINE_MEMBER( output_rxd ) { m_port->m_rxd = state; m_port->m_rxd_handler(state); } DECLARE_WRITE_LINE_MEMBER( output_dcd ) { m_port->m_dcd = state; m_port->m_dcd_handler(state); } diff --git a/src/mame/drivers/ccs2810.cpp b/src/mame/drivers/ccs2810.cpp index 2bf39f94ca7..55e66b067a4 100644 --- a/src/mame/drivers/ccs2810.cpp +++ b/src/mame/drivers/ccs2810.cpp @@ -916,7 +916,7 @@ MACHINE_CONFIG_START(ccs_state::ccs2810) MCFG_INS8250_OUT_TX_CB(DEVWRITELINE("rs232", rs232_port_device, write_txd)) MCFG_INS8250_OUT_DTR_CB(DEVWRITELINE("rs232", rs232_port_device, write_dtr)) MCFG_INS8250_OUT_RTS_CB(DEVWRITELINE("rs232", rs232_port_device, write_rts)) - MCFG_INS8250_OUT_OUT1_CB(DEVWRITELINE("rs232", rs232_port_device, write_etc)) // RLSD + MCFG_INS8250_OUT_OUT1_CB(DEVWRITELINE("rs232", rs232_port_device, write_spds)) // RLSD MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal") MCFG_RS232_RXD_HANDLER(DEVWRITELINE("ins8250", ins8250_device, rx_w)) diff --git a/src/mame/drivers/vt100.cpp b/src/mame/drivers/vt100.cpp index 676d77c9f31..0f0445a9894 100644 --- a/src/mame/drivers/vt100.cpp +++ b/src/mame/drivers/vt100.cpp @@ -7,7 +7,6 @@ 29/04/2009 Preliminary driver. TODO: some video attributes are not fully supported yet - TODO: VT102 modem control loopback test needs different connections TODO: support for the on-AVO character set roms TODO: finish support for the on-cpu board alternate character set rom TODO: STP (standard terminal port) bus for VT1XX-AC and VT125 @@ -189,6 +188,9 @@ WRITE8_MEMBER(vt100_state::nvr_latch_w) // C2 is used to disable pullup on data line m_nvr->data_w(BIT(data, 2) ? 0 : !BIT(data, 0)); + + // SPDS present on pins 11, 19 and 23 of EIA connector + m_rs232->write_spds(BIT(data, 5)); } void vt100_state::vt100_io(address_map &map) -- cgit v1.2.3