[Simh] DOSBox Terminal emulator break, msKermit 3.15
Rodney Brown
rdbrown at pacific.net.au
Thu Apr 21 19:39:30 EDT 2016
With the attached patch DOSBox will support BREAK over nullmodem or
modem (telnet) connections.
Tested with msKermit 3.15 connecting to the HP3000 emulator
(Alt-B, Ctrl-] L )
The DOS HP Terminal Program (Manual 24597-90002 Nov 1988) worked
(Shift-Break)
as did HP AdvanceLink 2392 ~1986. (Alt-F1)
Using DOSBox
serial1 nullmodem server:127.0.0.1 port:1054
rather than
serial1 modem
and connecting with the Hayes style command.
ATD 127.0.0.1 port:1054
seemed to be more stable.
-------------- next part --------------
diff --git a/src/hardware/serialport/nullmodem.cpp b/src/hardware/serialport/nullmodem.cpp
index 2865073..396bf2e 100644
--- a/src/hardware/serialport/nullmodem.cpp
+++ b/src/hardware/serialport/nullmodem.cpp
@@ -177,8 +177,8 @@ Bits CNullModem::readChar() {
// get the next char
Bits rxchar = clientsocket->GetcharNonBlock();
if (rxchar==0xff) return rxchar; // 0xff 0xff -> 0xff was meant
- rxchar&0x1? setCTS(true) : setCTS(false);
- rxchar&0x2? setDSR(true) : setDSR(false);
+ setCTS((rxchar&0x1) != 0);
+ setDSR((rxchar&0x2) != 0);
if (rxchar&0x4) receiveByteEx(0x0,0x10);
return -1; // no "payload" received
} else return rxchar;
@@ -561,8 +561,16 @@ Bits CNullModem::TelnetEmulation(Bit8u data) {
/* setBreak(val) switches break on or off **/
/*****************************************************************************/
-void CNullModem::setBreak (bool /*value*/) {
- CNullModem::setRTSDTR(getRTS(), getDTR());
+void CNullModem::setBreak (bool value) {
+ if (!clientsocket)
+ CNullModem::setRTSDTR(getRTS(), getDTR());
+ else if (value) {
+ Bit8u response[2];
+
+ response[0]=0xff; /* IAC */
+ response[1]=243; /* BREAK: NVT character BRK */
+ clientsocket->SendArray(response, 2);
+ }
}
/*****************************************************************************/
diff --git a/src/hardware/serialport/softmodem.cpp b/src/hardware/serialport/softmodem.cpp
index d135b8f..34d81a1 100644
--- a/src/hardware/serialport/softmodem.cpp
+++ b/src/hardware/serialport/softmodem.cpp
@@ -796,8 +796,17 @@ void CSerialModem::updateMSR() {
// think it is not needed
}
-void CSerialModem::setBreak(bool) {
+void CSerialModem::setBreak(bool value) {
// TODO: handle this
+ if (!clientsocket)
+ ; // TODO: handle this
+ else if (value) {
+ Bit8u response[2];
+
+ response[0]=0xff; /* IAC */
+ response[1]=243; /* BREAK: NVT character BRK */
+ clientsocket->SendArray(response, 2);
+ }
}
void CSerialModem::setRTSDTR(bool rts, bool dtr) {
More information about the Simh
mailing list