mirror of
https://github.com/holub/mame
synced 2025-06-05 12:26:35 +03:00
rs232: Add DCE RxC/TxC callbacks (untested) and table of standard signals (nw)
This commit is contained in:
parent
7c314ec44d
commit
970ec09d1e
@ -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;
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user