summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/rs232
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2017-11-30 00:29:25 -0500
committer AJR <ajrhacker@users.noreply.github.com>2017-11-30 00:30:51 -0500
commit970ec09d1eccc5463e9746045c104140a872e9ba (patch)
tree89c4b87de26fb641a149e36cf7e56abff2206e7d /src/devices/bus/rs232
parent7c314ec44dcfa33e3de8af790eca948a77928e7d (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.cpp42
-rw-r--r--src/devices/bus/rs232/rs232.h16
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);