This is an old revision of the document!
Synchronet Virtual DOS Modem
SVDM is a modem emulator for Windows which utilizes the Synchronet Virtual UART/FOSSIL Driver (DOSXTRN.EXE/SBBSEXEC.DLL
) to enable support for DOS communications programs on Windows NT-based operating systems. 64-bit Windows support is enabled by also installing NTVDMx64.
SVDM should run on 32-bit and 64-bit editions of Windows XP and later.
Although SVDM reuses components of the Synchronet BBS Software and shares some of its source code and libraries, it is is not technically “part of” Synchronet BBS nor is it required for the normal use or operation of a Synchronet BBS.
Uses
- Use 16-bit DOS terminal programs (e.g. Telix, ProComm, Qmodem, Telemate, etc.) to connect to Internet-connected BBSes
- Use 16-bit DOS terminal program's “host mode” to accept incoming Telnet or “Raw TCP” connections from Internet clients
- Use 16-bit DOS BBS program (e.g. Synchronet v1/2, WWIVv4, TriBBS, etc.) to accept incoming Telnet or “Raw TCP” connections from Internet users
- Run 16-bit DOS door programs from Internet-connected BBSes (with the SVDM
-h
command-line option)
Features
- Open source (Microsoft Visual C)
- IPv4 and IPv6 support
- Telnet client and server support
- Raw TCP client and server support
- Accurate Hayes Smartmodem / USRobotics Sportster Modem “AT Command Set” emulation
- Complete with virtual NVRAM settings/number storage (i.e. AT&W, AT&Zn=S)
- Optional auto-answer (ATS0=1)
- RING result upon incoming connection attempts
- Verbal and numeric result modes
- “Dial” IP addresses or hostnames with optionally-specified TCP port and/or protocol
Install
SVDM currently does not include an “installer”, so you will need to copy the following files to a directory ideally in your system's search path:
svdm.exe
- the main program (modem emulator)svdm.ini
- configuration settings, optionaldosxtrn.exe
- 16-bit FOSSIL driver and VDD loadersbbsexec.dll
- 32-bit Virtual UART/Device Driver
On 32-bit editions of Windows Vista and later, sbbsexec.dll
must also be copied to your Windows/System32
directory (by an administrator).
Usage
The general usage is to use svdm
to execute the 16-bit DOS communications program of interest. Any command-line options you want to pass to the program may be specified on the command-line after the program path/filename.
usage: svdm [-opts] <program> [options] opts: -telnet Use Telnet protocol by default -raw Use Raw TCP by default -4 Use IPv4 address family by default -6 Use IPv6 address family by default -l[addr] Listen for incoming TCP connections [on optionally-specified network interface] -p<port> Specify default TCP port number (decimal) -d Enable debug output -h<sock> Specify socket descriptor/handle to use (decimal) -r<cps> Specify maximum receive data rate (chars/second) -c<fname> Specify alternate configuration (.ini) path/filename -V Display detailed version information and exit
Examples
Run Telix:
svdm telix
Run Renegade BBS Software (in WFC mode), listening on all IPv4 network interfaces for incoming TCP connections:
svdm -l -4 renegade
Dialing
SVDM responds to the ATD
dial command to perform an outbound TCP connection. If the first character of the dial-string (following the 'D') is an uppercase 'T' or 'P', this character is ignored as it was used to specify “tone” or “pulse” dialing on the old telephone system and not relevant to TCP/IP connections. For example, any of the following commands may be used to “dial” test.synchro.net:
ATDTtest.synchro.net ATDPtest.synchro.net ATDtest.synchro.net atdtest.synchro.net
The address to “dial” may be specified as a DNS hostname, an IPv4 address, or an IPv6 address:
ATDvert.synchro.net ATD192.168.1.2 ATD[::1]
The TCP port to connect to may be specified following the address and a colon:
ATDvert.synchro.net:23 ATD192.168.1.2:23 ATD[::1]:23
The TCP protocol to connect with may be specified (followed by a colon) before the address:
ATDtelnet:vert.synchro.net ATDtelnet:192.168.1.2 ATDraw:[::1]
The last “number dialed” can be dialed again by dialing 'L' or 'l':
ATDL
Up to 20 dial strings (numbers) can be stored using the AT&Z
command:
AT&Z0=vert.synchro.net AT&Z1=L
Saved dial strings (numbers) can be queried/displayed using the AT&Z
command:
AT&Z0? AT&ZL?
Save dial strings (numbers) can be dialed by using the ATDSn
command:
ATDS0
If your DOS terminal program of choice has trouble dialing long dial strings (e.g. accommodating long DNS hostnames or IPv6 addresses), try using the saved number storage feature to resolve that limitation. After enter the following command, dialing “S0” as a “phone number” would actually connect to “telnet:vert.synchro.net:23”.
AT&Z0=telnet:vert.synchro.net:23
Configure
SVDM's behavior can be customized or modified by specifying command-line parameters, invoking modem “AT commands”, or creating/modifying a .ini file
.
The default configuration file svdm.ini
will be loaded from the same directory where the executed svdm.exe
is located.
Section | Key | Default | Description |
---|---|---|---|
Root | Mode | Raw | Specify the TCP protocol: Telnet or Raw |
Root | Port | 23 | Specify the TCP port number |
Root | Node | 0 | Specify the BBS node number |
Root | Listen | false | Enable listening for incoming TCP connections |
Root | Debug | false | Enable debug output |
Root | LogLevel | Info | Set virtual UART/FOSSIL driver log level |
Root | YieldInterval | 1.0 | Set time-slice yield interval (in milliseconds) for FOSSIL driver |
Root | CanDisconnect | true | Set to false to disable ability for DOS program to disconnect |
Root | ServerEcho | true | The server (e.g. BBS) is expected to echo input back to the client (for Telnet option negotiation) |
Root | Rate | 0 | Limit receive rate to a specific number of characters-per-second |
Root | AddressFamily | IPv4 | Default IP address family: “unspec”, “ipv4”, or “ipv6” |
Root | BusyNotice | hard-coded | Message to send before disconnecting remote connections when already-servicing a remote client/user connection |
Modem | AutoAnswer | false | Automatically answer/accept incoming TCP-connection attempts (ATS0 ) |
Modem | Echo | true | Send AT command characters back to terminal (ATE ) |
Modem | Quiet | false | Respond to AT commands (ATQ ) |
Modem | Numeric | false | Respond to AT commands with numeric rather than verbal result codes (ATV ) |
Modem | CR | 13 | ASCII value of carriage return character (ATS3 ) |
Modem | LF | 10 | ASCII value of line feed character (ATS4 ) |
Modem | BS | 8 | ASCII value of backspace character (ATS5 ) |
Modem | ESC | 43, + | ASCII value of escape character (ATS2 ) |
Modem | ExtResults | 4 | Extended results mode (ATX ) |
Modem | DialWait | 60 | Dial timeout in seconds (ATS7 ) |
Modem | GuardTime | 50 | Escape sequence Guard time in 20-millisecond units (ATS12 ) |
UART | Virtualize | true | Virtualize a UART (COM Port) in addition to providing a FOSSIL service |
UART | ComPort | 1 | COM Port number (e.g. 1-4) to virtualize |
UART | IRQ | depends | Hardware interrupt request (IRQ) line to virtualize, e.g. 4 |
UART | Address | depends | Hardware I/O port base address (use 0x prefix for hexadecimal notation, e.g. 0x3f8 ) |
sockopts | various | See sockopts.ini |
Settings changed via modem AT command take precedence over command-line options which take precedence over .ini file settings.
Settings in the Root section may also be specified in a program-specific section (named after the program itself), to create program-specific settings.
Settings in the UART
section may also be over-ridden in a program-specific section but naming the section [<program>.UART]
.
For example, by default SVDM emulates a UART for COM Port 1 (I/O address 0x3f8, IRQ 4), but you could change the emulated COM Port for one particular program by creating a program-specific UART section in the .ini
file:
[telix.UART] ComPort=2