diff options
author | 2017-11-30 00:29:25 -0500 | |
---|---|---|
committer | 2017-11-30 00:30:51 -0500 | |
commit | 970ec09d1eccc5463e9746045c104140a872e9ba (patch) | |
tree | 89c4b87de26fb641a149e36cf7e56abff2206e7d /src/devices/bus/rs232 | |
parent | 7c314ec44dcfa33e3de8af790eca948a77928e7d (diff) |
rs232: Add DCE RxC/TxC callbacks (untested) and table of standard signals (nw)
Diffstat (limited to 'src/devices/bus/rs232')
-rw-r--r-- | src/devices/bus/rs232/rs232.cpp | 42 | ||||
-rw-r--r-- | src/devices/bus/rs232/rs232.h | 16 |
2 files changed, 58 insertions, 0 deletions
diff --git a/src/devices/bus/rs232/rs232.cpp b/src/devices/bus/rs232/rs232.cpp index ddac39b5764..544a0a9121c 100644 --- a/src/devices/bus/rs232/rs232.cpp +++ b/src/devices/bus/rs232/rs232.cpp @@ -1,5 +1,39 @@ // license:BSD-3-Clause // copyright-holders:smf +/*************************************************************************** + + Generic EIA RS-232/CCITT V.24 serial port emulation + +**************************************************************************** + + Source DB-25 DB-9 + 1 AA Protective Ground [Shield] + 7 5 AB Signal Ground [Common Return] + DTE → 2 3 BA Transmitted Data + ← DCE 3 2 BB Received Data + DTE → 4 7 CA Request to Send + ← DCE 5 8 CB Clear to Send + ← DCE 6 6 CC Data Set Ready [Data Mode] + DTE → 20 4 CD Data Terminal Ready + ← DCE 22 9 CE Ring Indicator + ← DCE 8 1 CF Received Line Signal Detector [Data Carrier Detect] + ← DCE 21 CG Signal Quality Detector + DTE → 23 CH Data Signal Rate Selector + ← DCE 23 CI Data Signal Rate Selector [Signaling Rate Indicator] + DTE → 24 DA Transmitter Signal Element Timing [External Tx Clock] + ← DCE 15 DB Transmitter Signal Element Timing + ← DCE 17 DD Receiver Signal Element Timing + DTE → 14 SBA Secondary Transmitted Data + ← DCE 16 SBB Secondary Received Data + DTE → 19 SCA Secondary Request to Send + ← DCE 13 SCB Secondary Clear to Send + ← DCE 12 SCF Secondary Received Line Signal Detector + DTE → 18 LL Local Loopback + DTE → 21 RL Remote Loopback + ← DCE 25 TM Test Mode + +***************************************************************************/ + #include "emu.h" #include "rs232.h" @@ -18,11 +52,15 @@ rs232_port_device::rs232_port_device(const machine_config &mconfig, device_type m_dsr(0), m_ri(0), m_cts(0), + m_dce_rxc(0), + m_dce_txc(0), m_rxd_handler(*this), m_dcd_handler(*this), m_dsr_handler(*this), m_ri_handler(*this), m_cts_handler(*this), + m_rxc_handler(*this), + m_txc_handler(*this), m_dev(nullptr) { } @@ -43,12 +81,16 @@ void rs232_port_device::device_start() m_dsr_handler.resolve_safe(); m_ri_handler.resolve_safe(); m_cts_handler.resolve_safe(); + m_rxc_handler.resolve_safe(); + m_txc_handler.resolve_safe(); save_item(NAME(m_rxd)); save_item(NAME(m_dcd)); save_item(NAME(m_dsr)); save_item(NAME(m_ri)); save_item(NAME(m_cts)); + save_item(NAME(m_dce_rxc)); + save_item(NAME(m_dce_txc)); m_rxd = 1; m_dcd = 1; diff --git a/src/devices/bus/rs232/rs232.h b/src/devices/bus/rs232/rs232.h index b062d35ff5b..266bba34ca1 100644 --- a/src/devices/bus/rs232/rs232.h +++ b/src/devices/bus/rs232/rs232.h @@ -25,6 +25,12 @@ #define MCFG_RS232_CTS_HANDLER(_devcb) \ devcb = &rs232_port_device::set_cts_handler(*device, DEVCB_##_devcb); +#define MCFG_RS232_RXC_HANDLER(_devcb) \ + devcb = &rs232_port_device::set_rxc_handler(*device, DEVCB_##_devcb); + +#define MCFG_RS232_TXC_HANDLER(_devcb) \ + devcb = &rs232_port_device::set_txc_handler(*device, DEVCB_##_devcb); + #define RS232_BAUD_110 (0x00) #define RS232_BAUD_150 (0x01) #define RS232_BAUD_300 (0x02) @@ -125,6 +131,8 @@ public: template <class Object> static devcb_base &set_dsr_handler(device_t &device, Object &&cb) { return downcast<rs232_port_device &>(device).m_dsr_handler.set_callback(std::forward<Object>(cb)); } template <class Object> static devcb_base &set_ri_handler(device_t &device, Object &&cb) { return downcast<rs232_port_device &>(device).m_ri_handler.set_callback(std::forward<Object>(cb)); } template <class Object> static devcb_base &set_cts_handler(device_t &device, Object &&cb) { return downcast<rs232_port_device &>(device).m_cts_handler.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_rxc_handler(device_t &device, Object &&cb) { return downcast<rs232_port_device &>(device).m_rxc_handler.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_txc_handler(device_t &device, Object &&cb) { return downcast<rs232_port_device &>(device).m_txc_handler.set_callback(std::forward<Object>(cb)); } DECLARE_WRITE_LINE_MEMBER( write_txd ); DECLARE_WRITE_LINE_MEMBER( write_dtr ); @@ -136,6 +144,8 @@ public: DECLARE_READ_LINE_MEMBER( dsr_r ) { return m_dsr; } DECLARE_READ_LINE_MEMBER( ri_r ) { return m_ri; } DECLARE_READ_LINE_MEMBER( cts_r ) { return m_cts; } + DECLARE_READ_LINE_MEMBER( rxc_r ) { return m_dce_rxc; } + DECLARE_READ_LINE_MEMBER( txc_r ) { return m_dce_txc; } protected: rs232_port_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); @@ -148,12 +158,16 @@ protected: int m_dsr; int m_ri; int m_cts; + int m_dce_rxc; + int m_dce_txc; devcb_write_line m_rxd_handler; devcb_write_line m_dcd_handler; devcb_write_line m_dsr_handler; devcb_write_line m_ri_handler; devcb_write_line m_cts_handler; + devcb_write_line m_rxc_handler; + devcb_write_line m_txc_handler; private: device_rs232_port_interface *m_dev; @@ -176,6 +190,8 @@ public: DECLARE_WRITE_LINE_MEMBER( output_dsr ) { m_port->m_dsr = state; m_port->m_dsr_handler(state); } DECLARE_WRITE_LINE_MEMBER( output_ri ) { m_port->m_ri = state; m_port->m_ri_handler(state); } DECLARE_WRITE_LINE_MEMBER( output_cts ) { m_port->m_cts = state; m_port->m_cts_handler(state); } + DECLARE_WRITE_LINE_MEMBER( output_rxc ) { m_port->m_dce_rxc = state; m_port->m_rxc_handler(state); } + DECLARE_WRITE_LINE_MEMBER( output_txc ) { m_port->m_dce_txc = state; m_port->m_txc_handler(state); } protected: device_rs232_port_interface(const machine_config &mconfig, device_t &device); |