How Windows 95 Detected Legacy Sound Blaster Cards
This article examines the mechanisms Windows 95 used to detect and configure legacy, non-Plug and Play (PnP) ISA Sound Blaster sound cards. Because original Industry Standard Architecture (ISA) cards lacked the ability to report their identities automatically, Windows 95 implemented a hybrid detection strategy. The operating system combined passive analysis of existing DOS configuration files with controlled, active hardware probing across common I/O port ranges to safely identify the card model, IRQ, and DMA settings without crashing the system.
During the mid-1990s, most sound cards were legacy ISA expansion
boards that relied on physical jumpers or DIP switches to set base I/O
ports, Interrupt Requests (IRQs), and Direct Memory Access (DMA)
channels. These legacy cards could not broadcast their resource
requirements to the system bus. To incorporate these devices into its
new centralized Device Manager, Windows 95 used the Hardware Detection
Engine—managed primarily by SYSDETMG.DLL and specific
device detection modules.
The first phase of Sound Blaster detection was passive analysis.
Windows 95 scanned initialization files and memory structures left
behind by MS-DOS. The detection engine specifically looked for the
standard SET BLASTER= environment variable in
AUTOEXEC.BAT, which historically defined the base address
(such as 220h), IRQ (usually 5 or 7), low DMA (DMA 1), high DMA (DMA 5),
and card type. If this variable was present, Windows 95 used it as a
verified baseline, significantly reducing the risk of bus contention or
system crashes. The system also inspected CONFIG.SYS and
SYSTEM.INI for previously loaded real-mode drivers.
If no configuration strings existed, the hardware detection manager switched to active probing. This process involved testing standard Sound Blaster base I/O addresses: 210h, 220h, 230h, 240h, 250h, and 260h. To avoid system lockups caused by writing to sensitive unrelated peripherals, the detection algorithm used a strict handshake sequence on the card’s Digital Signal Processor (DSP):
- The detection module wrote a value of
1followed by a0to the DSP reset port (Base + 6h). - The engine polled the DSP read-buffer status port (Base + Eh) to verify that data was waiting.
- The engine read the DSP read data port (Base + Ah). If the card
returned a value of
0xAA, a functioning Sound Blaster DSP was confirmed at that address.
Once a card responded, the detection module issued command
0xE1 to the DSP to read the firmware version. The returned
major and minor version numbers allowed Windows 95 to classify the
specific hardware model:
- Version 1.xx indicated an original Sound Blaster 1.0 or 1.5.
- Version 2.xx indicated a Sound Blaster 2.0.
- Version 3.xx indicated a Sound Blaster Pro.
- Version 4.xx indicated a Sound Blaster 16, AWE32, or AWE64.
On models with version 4.xx DSPs, the detection engine could directly query internal configuration registers via the mixer chip (at Base + 4h and 5h) to read software-selectable IRQ and DMA registers. For older cards that lacked readable configuration registers, the installer either deduced resources by testing interrupt lines directly with timed pulses or prompted the user to confirm the physical jumper locations.
After confirming the hardware, Windows 95 registered the Sound Blaster card in the registry as a non-reconfigurable device. It marked the occupied I/O ports, IRQs, and DMA channels as reserved, preventing newer Plug and Play PCI or PnP ISA devices from claiming the same resources and causing system conflicts.