Windows 3.11 Serial Baud Rate Configuration
This article examines how Microsoft Windows 3.11 configured and managed serial communication baud rates through graphical utilities, system configuration files, internal communications drivers, and the Win16 API. It also addresses the underlying hardware interaction with Universal Asynchronous Receiver-Transmitter (UART) chips and the common workarounds required to sustain high-speed data transmission in a 16-bit multitasking environment.
The Graphical Interface: Ports Applet
In Windows 3.11, the primary user interface for configuring serial ports was the Ports applet located within the Control Panel.
When a user selected a communications port (COM1 through COM4) and clicked Settings, a dialog presented standard serial framing and transmission parameters:
- Baud Rate: Predefined selections commonly included 110, 300, 600, 1200, 2400, 4800, 9600, and 19200 bits per second (bps).
- Data Bits: 4, 5, 6, 7, or 8.
- Parity: Even, Odd, None, Mark, or Space.
- Stop Bits: 1, 1.5, or 2.
- Flow Control: Xon/Xoff, Hardware (RTS/CTS), or None.
An Advanced sub-dialog allowed users to map the base I/O port address and the Interrupt Request line (IRQ), which was critical when resolving resource conflicts between COM1/COM3 (typically sharing IRQ 4) and COM2/COM4 (typically sharing IRQ 3).
Configuration Storage: WIN.INI and SYSTEM.INI
The settings chosen in the Control Panel were written directly to Windows initialization files:
- WIN.INI: The
[ports]section stored default initialization strings used by standard applications and printing subsystems. A typical entry appeared as:[ports] COM1:=9600,n,8,1,x COM2:=19200,e,7,1,p - SYSTEM.INI: Low-level port assignments, buffer
allocations, and 386 Enhanced Mode hardware virtualization parameters
were stored under the
[386Enh]section. Key parameters included:COM1Base = 03F8hCOM1Irq = 4COM1Buffer = 128(size of the software receive buffer in characters)COMIrqSharing = TRUE(allowed sharing of IRQ lines if supported by hardware)
Architecture: COMM.DRV and VCD
Windows 3.11 managed serial hardware through a layered driver architecture:
- COMM.DRV: The standard 16-bit user-mode communications driver provided the software interface between Windows applications and the hardware.
- VCD (Virtual Communications Driver): When running
in 386 Enhanced Mode,
*vcdintercepted hardware port accesses, virtualized interrupt requests, and prevented conflicts between multiple virtual DOS machines (VDMs) and Windows applications attempting to access the same physical serial port.
When an application requested a specific baud rate, it bypassed DOS
interrupt 14h calls and used the Windows Communications API. Software
initialized a DCB (Device Control Block) structure via
BuildCommDCB and applied the baud rate, flow control, and
byte framing using SetCommState. The COMM.DRV
driver calculated the appropriate clock divisor and programmed the
serial chip directly.
Hardware Limitations and High-Speed Baud Rates
The primary limitation of Windows 3.11 serial handling was its native support for contemporary UART hardware:
- 8250 and 16450 UARTs: These older chips contained only a 1-byte buffer. At speeds exceeding 9600 or 19200 baud, the interrupt latency of Windows 3.11's cooperative multitasking environment often caused buffer overruns (dropped characters).
- 16550A UART: This chip introduced a 16-byte FIFO
(First-In, First-Out) hardware buffer. However, the default
COMM.DRVshipped with Windows 3.1 and early Windows 3.11 releases had defective or disabled 16550 FIFO support, preventing the OS from taking full advantage of the hardware queue. - Third-Party Drivers: To operate 14.4k, 28.8k, or
56k modems at baud rates of 38400, 57600, or 115200 bps without data
loss, users routinely replaced
COMM.DRVinSYSTEM.INIwith specialized third-party drivers such as TurboCom/Rx or CyberCom. These replacement drivers enabled the 16550 FIFO triggers and allowed the system to reliably sustain higher divisor rates.