Windows 3.11 COM Port Communications Driver
In Microsoft Windows 3.11, serial communications over COM ports were primarily managed by the standard driver COMM.DRV, working alongside the virtual device driver *VCD (Virtual Communications Driver) in 386 Enhanced Mode. This article explains the roles these drivers played, how Windows 3.11 handled serial hardware, and how the operating system mediated access between Windows applications and legacy DOS software.
The Role of COMM.DRV
The primary interface for serial communication in Windows 3.11 was
COMM.DRV. Configured in the [boot] section of
the SYSTEM.INI file via the line
comm.drv=comm.drv, this 16-bit dynamic-link library
translated high-level Windows API communication calls into low-level
instructions for the PC's Universal Asynchronous Receiver-Transmitter
(UART) chips, such as the 8250, 16450, and 16550.
COMM.DRV controlled essential port settings, including
baud rate, parity, data bits, and stop bits. It also managed software
input and output buffers, allowing applications like Windows Terminal,
dial-up utilities, and fax programs to send and receive data
asynchronously without stalling the graphical user interface.
Port Virtualization with *VCD
When Windows 3.11 ran in 386 Enhanced Mode, hardware access was
virtualized to prevent conflicts between different programs. The Virtual
Communications Driver, designated internally as *VCD and
loaded directly from WIN386.EXE, intercepted direct
hardware accesses to the COM port I/O addresses and interrupt request
lines (IRQs).
*VCD served several critical functions:
- Conflict Resolution: It determined whether a native Windows application or a background DOS session currently owned the COM port.
- Interrupt Virtualization: It trapped hardware interrupts generated by serial devices and routed them to the appropriate virtual machine.
- State Preservation: When multitasking between
multiple DOS and Windows applications,
*VCDpreserved the register states of the serial hardware.
High-Speed Limitations and Replacements
The standard COMM.DRV included with Windows 3.11 had
known performance limitations at speeds exceeding 9600 baud, primarily
due to inefficient handling of the 16-byte FIFO (First In, First Out)
hardware buffers found on 16550AF UART chips.
As external modems operating at 14.4 kbps and 28.8 kbps became
common, dropped characters and buffer overrun errors were frequent. To
solve this, users frequently replaced the default COMM.DRV
entry in SYSTEM.INI with enhanced, third-party
communication drivers—such as TurboCom or CyberCom—which properly
utilized the 16550 FIFO buffers and supported speeds up to 115,200
baud.