How Windows 98 Handled IRQ Allocation

Microsoft Windows 98 managed hardware Interrupt Request (IRQ) allocation through an integrated combination of Plug and Play (PnP) architecture, the system Configuration Manager, and PCI IRQ Steering. Faced with the strict 16-line limitation of the legacy x86 interrupt architecture alongside an increasing number of peripheral devices, Windows 98 moved away from static hardware jumpers by dynamically balancing system resources, detecting hardware capabilities, and enabling multiple PCI devices to safely share single interrupt lines.

The Legacy 16-IRQ Architecture

IBM-compatible PCs relied on dual cascaded Intel 8259 interrupt controllers, which provided a total of 16 hardware interrupt lines (IRQ 0 through 15). Many of these were permanently reserved for core system functions:

  • IRQ 0: System timer
  • IRQ 1: Keyboard
  • IRQ 2: Cascade line for IRQs 8–15
  • IRQ 8: Real-time clock
  • IRQ 13: Numeric coprocessor
  • IRQ 14/15: Primary and secondary IDE controllers

This left fewer than half of the total IRQ lines available for sound cards, modems, network adapters, and graphics cards. Traditional ISA (Industry Standard Architecture) expansion cards generally required exclusive access to an assigned IRQ, meaning that two devices attempting to share a line would cause system freezes or hardware failures.

The Configuration Manager and Arbitrators

Windows 98 handled resource allocation through its internal Configuration Manager, which communicated with hardware enumerators and arbitrators.

When the computer booted, the Configuration Manager mapped all connected devices into a hierarchical "Hardware Tree." For each device, the system identified resource requirements (I/O ports, memory addresses, DMA channels, and IRQs). The IRQ Arbitrator then analyzed available resources and assigned interrupts based on priority:

  1. Legacy (Non-PnP) ISA Devices: If detected or manually reserved in the BIOS, these devices were granted their hardwired IRQs first, as they could not be remapped dynamically.
  2. PnP ISA Devices: Configured next, using software-programmable registers to fit into remaining open interrupt lines.
  3. PCI Devices: Configured last, due to their ability to adapt to flexible routing.

PCI IRQ Steering

The primary innovation that made IRQ management stable in Windows 98 was PCI IRQ Steering. Built on the PCI specification, this technology allowed multiple PCI devices to share a single hardware IRQ without conflict.

PCI devices generate interrupts across four logical lines (INTA, INTB, INTC, and INTD). A hardware routing chip on the motherboard maps these logical lines to the master interrupt controller's physical IRQs.

Windows 98 controlled this process through specific mechanisms:

  • Routing Table Query: Windows 98 read the motherboard's IRQ routing table via ACPI (Advanced Configuration and Power Interface) tables, the PCI BIOS 2.1 specification, or direct chipset register access.
  • Dynamic Assignment: If the system ran out of unused IRQs, the OS dynamically mapped multiple PCI slots to the same physical IRQ line.
  • Interrupt Service Routine Chaining: When a shared interrupt fired, Windows 98 traversed a chain of Interrupt Service Routines (ISRs). Each device driver linked to that IRQ polled its respective hardware to determine which device triggered the interrupt, serviced it, and cleared the request.

BIOS Integration and Device Manager

Windows 98 operated alongside the system BIOS. While the BIOS performed initial, rudimentary resource allocations during the Power-On Self-Test (POST), Windows 98 had the capability to override BIOS decisions once the 32-bit protected-mode kernel loaded.

Users could inspect and manage these allocations directly through the Windows 98 Device Manager:

  • Viewing Assignments: Users could sort Computer Properties by "Interrupt request (IRQ)" to see which devices held lines 0 through 15.
  • IRQ Holder for PCI Steering: Devices sharing an interrupt were often listed alongside a virtual device labeled "IRQ Holder for PCI Steering," indicating that Windows had successfully taken over interrupt mapping for that line.
  • Manual Override: For troublesome hardware, users could disable automatic resource management in the device's properties, uncheck the "Use automatic settings" box, and manually designate a specific IRQ to prevent conflicts with legacy peripherals.