How Windows 95 Supported RS-232 External Modems
Windows 95 transformed personal computing by standardizing how operating systems communicate with external hardware. Prior to its release, DOS and early Windows versions required individual applications to directly manage serial hardware and unique modem command sets. Windows 95 solved this fragmentation by introducing a centralized communications architecture featuring the Universal Modem Driver (Unimodem), the Telephony Application Programming Interface (TAPI), and dedicated 32-bit serial communications drivers, allowing external RS-232 modems to function seamlessly across all network and communications software.
The Serial Port Layer: VCOMM and Serial Drivers
At the lowest software layer, Windows 95 replaced old BIOS and
direct-hardware access routines with protected-mode virtual device
drivers (VxDs). Physical RS-232 serial ports—typically COM1 through COM4
utilizing standard 9-pin or 25-pin D-sub connectors—were controlled by
SERIAL.VXD. This driver directly managed the machine's
Universal Asynchronous Receiver-Transmitter (UART) chips, such as the
8250, 16450, or the newer 16550A.
The 16550A UART introduced a 16-byte FIFO (First In, First Out) buffer. Windows 95 explicitly supported this buffer, exposing controls in the Device Manager to tune buffer thresholds. This dramatically reduced buffer overruns and data loss during high-speed transfers (up to 115,200 bps) over standard RS-232 pin configurations, including Data Terminal Ready (DTR), Data Set Ready (DSR), Request to Send (RTS), and Clear to Send (CTS) hardware flow control lines.
Sitting above the hardware driver was VCOMM.VXD, a
port-independent communications driver that provided a unified interface
for opening, reading, writing, and configuring communication ports. Any
request to send data over an RS-232 cable passed through
VCOMM.
The Unimodem Driver and Modem Definitions
To prevent every program from needing its own library of Hayes AT
commands, Windows 95 introduced the Universal Modem Driver
(UNIMODEM.VXD). Unimodem acted as an abstraction layer
between TAPI and the physical serial port.
Unimodem relied on standardized device information files
(.INF). When a user installed an external modem, Windows 95
consulted these files to find the correct:
- Initialization strings (
ATZ,AT&F, etc.) - Dialing commands (tone vs. pulse)
- Flow control commands (enabling hardware RTS/CTS)
- Error correction and data compression commands (V.42, V.42bis)
- Maximum DTE (Data Terminal Equipment) port speeds
By decoupling the command strings from the applications, external modems from different manufacturers (such as USRobotics, Hayes, or Practical Peripherals) could be swapped without reconfiguring individual terminal or dialer applications.
Telephony API (TAPI) Integration
Above Unimodem was TAPI (version 1.4 in early builds, upgradeable in later releases). TAPI treated the modem as a shared telephony service rather than a simple dumb pipe.
Instead of an application opening an RS-232 port directly, it sent high-level requests to TAPI, such as "dial this number" or "answer the incoming call." TAPI checked if the serial port was already in use, arbitrated access between multiple programs, and passed the request down to Unimodem. This eliminated resource conflicts where an application like a fax listener and a dial-up client would fight for the same COM port.
Plug and Play and Hardware Detection
Windows 95 introduced Plug and Play (PnP) support for RS-232 devices through the External COM Device specification. If an external RS-232 modem supported PnP, the operating system detected it during boot or hardware scans by toggling the DTR line. In response, a compliant modem asserted DSR and sent back a standardized identification string detailing its manufacturer and model.
For non-PnP external modems, the "Install New Modem" wizard queried
the RS-232 port directly. The wizard cycled through standard AT commands
(ATI0 through ATI4) over the serial lines to
retrieve product identification codes, matching the responses against
its internal .INF database to automatically install the
proper driver.
Network Integration via Dial-Up Networking
The final piece of RS-232 modem integration was Dial-Up Networking (DUN). Built on the Point-to-Point Protocol (PPP) and Serial Line Internet Protocol (SLIP), DUN allowed the operating system to bind standard network protocols—primarily TCP/IP, IPX/SPX, and NetBEUI—directly to the serial port.
When a user dialed an Internet Service Provider (ISP), DUN used TAPI and Unimodem to negotiate the RS-232 connection, establish the carrier, perform authentication (such as PAP or CHAP), and assign an IP address. Once established, the external modem on the serial port functioned as a standard network adapter, bringing Internet connectivity straight to the Windows 95 desktop.