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, *VCD preserved 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.