1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
|
// license:BSD-3-Clause
// copyright-holders:smf
/***************************************************************************
Generic EIA RS-232/CCITT V.24 serial port emulation
****************************************************************************
Source DB-25 DB-9 EIA V.24
1 AA 101 Protective Ground [Shield]
7 5 AB 102 Signal Ground [Common Return]
DTE → 2 3 BA 103 Transmitted Data
← DCE 3 2 BB 104 Received Data
DTE → 4 7 CA 105 Request to Send
← DCE 5 8 CB 106 Clear to Send
← DCE 6 6 CC 107 Data Set Ready [Data Mode]
DTE → 20 108.1 Connect Data Set to Line
DTE → 20 4 CD 108.2 Data Terminal Ready
← DCE 22 9 CE 125 Ring Indicator
← DCE 8 1 CF 109 Received Line Signal Detector [Data Carrier Detect]
← 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
DTE → 14 SBA 118 Secondary Transmitted Data
← DCE 16 SBB 119 Secondary Received Data
DTE → 19 SCA 120 Secondary Request to Send
← DCE 13 SCB 121 Secondary Clear to Send
← DCE 12 SCF 122 Secondary Received Line Signal Detector
DTE → 18 LL 141 Local Loopback
DTE → 21 RL 140 Remote Loopback
← DCE 25 TM 142 Test Mode
Mark (logic 1) = typically -12V (-3V maximum, -15V minimum)
Space (logic 0) = typically +12V (+3V minimum, +15V maximum)
***************************************************************************/
#include "emu.h"
#include "rs232.h"
DEFINE_DEVICE_TYPE(RS232_PORT, rs232_port_device, "rs232", "RS-232 Port")
rs232_port_device::rs232_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
rs232_port_device(mconfig, RS232_PORT, tag, owner, clock)
{
}
rs232_port_device::rs232_port_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, type, tag, owner, clock),
device_single_card_slot_interface<device_rs232_port_interface>(mconfig, *this),
m_rxd(0),
m_dcd(0),
m_dsr(0),
m_ri(0),
m_si(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_si_handler(*this),
m_cts_handler(*this),
m_rxc_handler(*this),
m_txc_handler(*this),
m_dev(nullptr)
{
}
rs232_port_device::~rs232_port_device()
{
}
void rs232_port_device::device_config_complete()
{
m_dev = get_card_device();
}
void rs232_port_device::device_resolve_objects()
{
m_rxd_handler.resolve_safe();
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();
m_rxd = 1;
m_dcd = 1;
m_dsr = 1;
m_ri = 1;
m_si = 1;
m_cts = 1;
}
void rs232_port_device::device_reset()
{
m_rxd_handler(m_rxd);
m_dcd_handler(m_dcd);
m_dsr_handler(m_dsr);
m_ri_handler(m_ri);
m_si_handler(m_si);
m_cts_handler(m_cts);
}
void rs232_port_device::device_start()
{
save_item(NAME(m_rxd));
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));
}
WRITE_LINE_MEMBER( rs232_port_device::write_txd )
{
if (m_dev)
m_dev->input_txd(state);
}
WRITE_LINE_MEMBER( rs232_port_device::write_dtr )
{
if (m_dev)
m_dev->input_dtr(state);
}
WRITE_LINE_MEMBER( rs232_port_device::write_rts )
{
if (m_dev)
m_dev->input_rts(state);
}
WRITE_LINE_MEMBER( rs232_port_device::write_etc )
{
if (m_dev)
m_dev->input_etc(state);
}
WRITE_LINE_MEMBER( rs232_port_device::write_spds )
{
if (m_dev)
m_dev->input_spds(state);
}
device_rs232_port_interface::device_rs232_port_interface(const machine_config &mconfig, device_t &device) :
device_interface(device, "rs232")
{
m_port = dynamic_cast<rs232_port_device *>(device.owner());
}
device_rs232_port_interface::~device_rs232_port_interface()
{
}
#include "ie15.h"
#include "keyboard.h"
#include "loopback.h"
#include "mboardd.h"
#include "null_modem.h"
#include "patchbox.h"
#include "printer.h"
#include "pty.h"
#include "rs232_sync_io.h"
#include "sun_kbd.h"
#include "swtpc8212.h"
#include "terminal.h"
template class device_finder<device_rs232_port_interface, false>;
template class device_finder<device_rs232_port_interface, true>;
void default_rs232_devices(device_slot_interface &device)
{
device.option_add("dec_loopback", DEC_RS232_LOOPBACK);
device.option_add("ie15", SERIAL_TERMINAL_IE15);
device.option_add("keyboard", SERIAL_KEYBOARD);
device.option_add("loopback", RS232_LOOPBACK);
device.option_add("mockingboard", SERIAL_MOCKINGBOARD_D);
device.option_add("null_modem", NULL_MODEM);
device.option_add("patch", RS232_PATCH_BOX);
device.option_add("printer", SERIAL_PRINTER);
device.option_add("pty", PSEUDO_TERMINAL);
device.option_add("rs232_sync_io", RS232_SYNC_IO);
device.option_add("rs_printer", RADIO_SHACK_SERIAL_PRINTER);
device.option_add("sunkbd", SUN_KBD_ADAPTOR);
device.option_add("swtpc8212", SERIAL_TERMINAL_SWTPC8212);
device.option_add("terminal", SERIAL_TERMINAL);
}
|