Add DEC 12-15336-00 RS232 loopback connector type (required for VT102 modem control self-test)

rs232: Add speed select output (nw)
This commit is contained in:
AJR 2018-03-19 14:27:46 -04:00
parent 4d497308ce
commit 556312c031
6 changed files with 81 additions and 2 deletions

View File

@ -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);
}
}

View File

@ -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

View File

@ -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)

View File

@ -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); }

View File

@ -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))

View File

@ -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)