From f4afe913fb8706239699d0d2aafd3662e952deda Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 19 Mar 2018 12:52:13 -0400 Subject: rs232: Add speed indicator to modem control (nw) --- src/devices/bus/rs232/loopback.cpp | 1 + src/devices/bus/rs232/rs232.cpp | 7 +++++++ src/devices/bus/rs232/rs232.h | 8 ++++++++ src/mame/drivers/cit101.cpp | 4 ++++ src/mame/drivers/vt100.cpp | 2 +- 5 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/devices/bus/rs232/loopback.cpp b/src/devices/bus/rs232/loopback.cpp index ff462a8a982..b91b7281346 100644 --- a/src/devices/bus/rs232/loopback.cpp +++ b/src/devices/bus/rs232/loopback.cpp @@ -29,6 +29,7 @@ WRITE_LINE_MEMBER( rs232_loopback_device::input_rts ) if (started()) { output_ri(state); + output_si(state); output_cts(state); } } diff --git a/src/devices/bus/rs232/rs232.cpp b/src/devices/bus/rs232/rs232.cpp index 975935eb9e3..3fad8eaeaac 100644 --- a/src/devices/bus/rs232/rs232.cpp +++ b/src/devices/bus/rs232/rs232.cpp @@ -21,6 +21,7 @@ ← DCE 21 CG 110 Signal Quality Detector DTE → 23 CH 111 Data Signal Rate Selector ← DCE 23 CI 112 Data Signal Rate Selector [Signaling Rate Indicator] + ← DCE 12 High Speed Indicator (Bell 212A) DTE → 24 DA 113 Transmitter Signal Element Timing [External Tx Clock] ← DCE 15 DB 114 Transmitter Signal Element Timing ← DCE 17 DD 115 Receiver Signal Element Timing @@ -55,6 +56,7 @@ rs232_port_device::rs232_port_device(const machine_config &mconfig, device_type m_dcd(0), m_dsr(0), m_ri(0), + m_si(0), m_cts(0), m_dce_rxc(0), m_dce_txc(0), @@ -62,6 +64,7 @@ rs232_port_device::rs232_port_device(const machine_config &mconfig, device_type m_dcd_handler(*this), m_dsr_handler(*this), m_ri_handler(*this), + m_si_handler(*this), m_cts_handler(*this), m_rxc_handler(*this), m_txc_handler(*this), @@ -84,6 +87,7 @@ void rs232_port_device::device_resolve_objects() m_dcd_handler.resolve_safe(); m_dsr_handler.resolve_safe(); m_ri_handler.resolve_safe(); + m_si_handler.resolve_safe(); m_cts_handler.resolve_safe(); m_rxc_handler.resolve_safe(); m_txc_handler.resolve_safe(); @@ -95,6 +99,7 @@ void rs232_port_device::device_start() save_item(NAME(m_dcd)); save_item(NAME(m_dsr)); save_item(NAME(m_ri)); + save_item(NAME(m_si)); save_item(NAME(m_cts)); save_item(NAME(m_dce_rxc)); save_item(NAME(m_dce_txc)); @@ -103,12 +108,14 @@ void rs232_port_device::device_start() m_dcd = 1; m_dsr = 1; m_ri = 1; + m_si = 1; m_cts = 1; m_rxd_handler(1); m_dcd_handler(1); m_dsr_handler(1); m_ri_handler(1); + m_si_handler(1); m_cts_handler(1); } diff --git a/src/devices/bus/rs232/rs232.h b/src/devices/bus/rs232/rs232.h index dbd372418d2..cc11cc76a85 100644 --- a/src/devices/bus/rs232/rs232.h +++ b/src/devices/bus/rs232/rs232.h @@ -22,6 +22,9 @@ #define MCFG_RS232_RI_HANDLER(_devcb) \ devcb = &downcast(*device).set_ri_handler(DEVCB_##_devcb); +#define MCFG_RS232_SI_HANDLER(_devcb) \ + devcb = &downcast(*device).set_si_handler(DEVCB_##_devcb); + #define MCFG_RS232_CTS_HANDLER(_devcb) \ devcb = &downcast(*device).set_cts_handler(DEVCB_##_devcb); @@ -130,6 +133,7 @@ public: template devcb_base &set_dcd_handler(Object &&cb) { return m_dcd_handler.set_callback(std::forward(cb)); } template devcb_base &set_dsr_handler(Object &&cb) { return m_dsr_handler.set_callback(std::forward(cb)); } template devcb_base &set_ri_handler(Object &&cb) { return m_ri_handler.set_callback(std::forward(cb)); } + template devcb_base &set_si_handler(Object &&cb) { return m_si_handler.set_callback(std::forward(cb)); } template devcb_base &set_cts_handler(Object &&cb) { return m_cts_handler.set_callback(std::forward(cb)); } template devcb_base &set_rxc_handler(Object &&cb) { return m_rxc_handler.set_callback(std::forward(cb)); } template devcb_base &set_txc_handler(Object &&cb) { return m_txc_handler.set_callback(std::forward(cb)); } @@ -143,6 +147,7 @@ public: DECLARE_READ_LINE_MEMBER( dcd_r ) { return m_dcd; } DECLARE_READ_LINE_MEMBER( dsr_r ) { return m_dsr; } DECLARE_READ_LINE_MEMBER( ri_r ) { return m_ri; } + DECLARE_READ_LINE_MEMBER( si_r ) { return m_si; } 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; } @@ -158,6 +163,7 @@ protected: int m_dcd; int m_dsr; int m_ri; + int m_si; int m_cts; int m_dce_rxc; int m_dce_txc; @@ -166,6 +172,7 @@ protected: devcb_write_line m_dcd_handler; devcb_write_line m_dsr_handler; devcb_write_line m_ri_handler; + devcb_write_line m_si_handler; devcb_write_line m_cts_handler; devcb_write_line m_rxc_handler; devcb_write_line m_txc_handler; @@ -190,6 +197,7 @@ public: DECLARE_WRITE_LINE_MEMBER( output_dcd ) { m_port->m_dcd = state; m_port->m_dcd_handler(state); } 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_si ) { m_port->m_si = state; m_port->m_si_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); } diff --git a/src/mame/drivers/cit101.cpp b/src/mame/drivers/cit101.cpp index c42e49b8f6b..14a1b0582a5 100644 --- a/src/mame/drivers/cit101.cpp +++ b/src/mame/drivers/cit101.cpp @@ -200,6 +200,10 @@ MACHINE_CONFIG_START(cit101_state::cit101) MCFG_I8255_OUT_PORTA_CB(WRITE8(cit101_state, nvr_address_w)) MCFG_I8255_IN_PORTB_CB(READ8(cit101_state, nvr_data_r)) MCFG_I8255_OUT_PORTB_CB(WRITE8(cit101_state, nvr_data_w)) + MCFG_I8255_IN_PORTC_CB(DEVREADLINE("comm", rs232_port_device, cts_r)) MCFG_DEVCB_BIT(0) + MCFG_DEVCB_CHAIN_INPUT(DEVREADLINE("comm", rs232_port_device, dcd_r)) MCFG_DEVCB_BIT(1) // tied to DSR for loopback test + MCFG_DEVCB_CHAIN_INPUT(DEVREADLINE("comm", rs232_port_device, ri_r)) MCFG_DEVCB_BIT(2) // tied to CTS for loopback test + MCFG_DEVCB_CHAIN_INPUT(DEVREADLINE("comm", rs232_port_device, si_r)) MCFG_DEVCB_BIT(3) // tied to CTS for loopback test MCFG_I8255_OUT_PORTC_CB(WRITE8(cit101_state, nvr_control_w)) MCFG_DEVICE_ADD("nvr", ER2055, 0) diff --git a/src/mame/drivers/vt100.cpp b/src/mame/drivers/vt100.cpp index b67840e1c49..676d77c9f31 100644 --- a/src/mame/drivers/vt100.cpp +++ b/src/mame/drivers/vt100.cpp @@ -173,7 +173,7 @@ READ8_MEMBER(vt100_state::modem_r) uint8_t ret = 0x0f; ret |= m_rs232->cts_r() << 7; - ret |= 1 /* m_rs232->spdi_r() */ << 6; + ret |= m_rs232->si_r() << 6; ret |= m_rs232->ri_r() << 5; ret |= m_rs232->dcd_r() << 4; -- cgit v1.2.3