rs232: Add DCE RxC/TxC callbacks (untested) and table of standard signals (nw)

This commit is contained in:
AJR 2017-11-30 00:29:25 -05:00
parent 7c314ec44d
commit 970ec09d1e
2 changed files with 58 additions and 0 deletions

View File

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

View File

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