summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2018-03-19 14:27:46 -0400
committer AJR <ajrhacker@users.noreply.github.com>2018-03-19 14:27:46 -0400
commit556312c031c94cf02d7d4b7a7b26b140f8f2ecbd (patch)
tree5802b39a25f6ba598e420ddac8313110b7cc4ca6
parent4d497308ceed2677af7408421556391b45567fc0 (diff)
Add DEC 12-15336-00 RS232 loopback connector type (required for VT102 modem control self-test)
rs232: Add speed select output (nw)
-rw-r--r--src/devices/bus/rs232/loopback.cpp52
-rw-r--r--src/devices/bus/rs232/loopback.h16
-rw-r--r--src/devices/bus/rs232/rs232.cpp7
-rw-r--r--src/devices/bus/rs232/rs232.h2
-rw-r--r--src/mame/drivers/ccs2810.cpp2
-rw-r--r--src/mame/drivers/vt100.cpp4
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)