summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2018-03-19 12:52:13 -0400
committer AJR <ajrhacker@users.noreply.github.com>2018-03-19 12:52:13 -0400
commitf4afe913fb8706239699d0d2aafd3662e952deda (patch)
tree22ca4ca4b5593a8912773637f4f4afdc09eb01bb
parentae543913407c4d0865991c0117e331e273493a0b (diff)
rs232: Add speed indicator to modem control (nw)
-rw-r--r--src/devices/bus/rs232/loopback.cpp1
-rw-r--r--src/devices/bus/rs232/rs232.cpp7
-rw-r--r--src/devices/bus/rs232/rs232.h8
-rw-r--r--src/mame/drivers/cit101.cpp4
-rw-r--r--src/mame/drivers/vt100.cpp2
5 files changed, 21 insertions, 1 deletions
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<rs232_port_device &>(*device).set_ri_handler(DEVCB_##_devcb);
+#define MCFG_RS232_SI_HANDLER(_devcb) \
+ devcb = &downcast<rs232_port_device &>(*device).set_si_handler(DEVCB_##_devcb);
+
#define MCFG_RS232_CTS_HANDLER(_devcb) \
devcb = &downcast<rs232_port_device &>(*device).set_cts_handler(DEVCB_##_devcb);
@@ -130,6 +133,7 @@ public:
template <class Object> devcb_base &set_dcd_handler(Object &&cb) { return m_dcd_handler.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_dsr_handler(Object &&cb) { return m_dsr_handler.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_ri_handler(Object &&cb) { return m_ri_handler.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_si_handler(Object &&cb) { return m_si_handler.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_cts_handler(Object &&cb) { return m_cts_handler.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_rxc_handler(Object &&cb) { return m_rxc_handler.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_txc_handler(Object &&cb) { return m_txc_handler.set_callback(std::forward<Object>(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;