← Blog
DRIVERS · 0.6.0

ISA Legacy Complete: Intel 82077AA FDC + PC Parallel Port LPT1 — 10 Drivers, Full x86 Legacy Stack

June 22, 2026 · sigil-drivers · Sigil-Docs
drivers x86 legacy 0.6.0

The x86 ISA legacy driver set is complete: Intel 82077AA Floppy Disk Controller (FDC) and PC parallel port LPT1 join the stack, bringing the total to 10 verified x86 drivers (12 counting the two new ones — all verified together). Every major IBM PC-AT era device now has a live-QEMU-verified CLS-dispatched driver. (sigil-drivers 1629535, a018249)

sigilOS desktop — Lumen file manager
sigilOS desktop — full x86 ISA legacy driver stack complete

Intel 82077AA FDC (1629535) — drivers/storage/fdc

The Intel 82077AA is the canonical ISA floppy disk controller, present in virtually every PC from the mid-1980s through the early 2000s. It is also present in QEMU's default x86 machine, making it an important target for the legacy stack — an uninitialized FDC causes BIOS stalls on drive enumeration even when no floppy is attached.

I/O port map

DOR (0x3F2)
Digital Output Register: motor control (bits 4–7), drive select (bits 0–1), DMA enable (bit 3), reset (bit 2 active-high deassert).
MSR (0x3F4)
Main Status Register (read-only): RQM (bit7 = Request for Master, controller ready to transfer) and DIO (bit6 = data direction, 1=controller→CPU).
FIFO (0x3F5)
Data FIFO: command byte stream in, result byte stream out. Direction determined by DIO bit in MSR.
CCR (0x3F7)
Configuration Control Register (write-only): data rate. Rate=0 = 500kbps (double-density MFM standard).

Reset sequence

The reset sequence follows the 82077AA spec exactly. DOR=0x00 asserts hardware reset; DOR=0x0C deasserts it (drive 0 selected, DMA enabled). After reset, the controller asserts interrupts for each drive in the system — these must be drained by issuing 4× SENSE_INTERRUPT (command 0x08) before any other command. Live QEMU result: ST0=0xC3 (drive 3 ready-changed), PCN=0 on each SENSE_INT — correct per spec for a system with no floppy inserted.

SPECIFY command

Command 0x03/0xCF/0x02 sets head load time, step rate, and DMA mode. The 82077AA accepts SPECIFY silently — no result bytes are returned, which is correct per the datasheet. The driver verifies acceptance by confirming MSR returns to RQM=1 after the three command bytes are written.

Driver internals

Practical note: The FDC is required for booting from floppy on early x86 boards — the BIOS calls INT 0x13 functions (which sigilOS will eventually reroute) to read the boot sector. Even in QEMU, having a properly initialized FDC ensures the firmware does not stall on legacy drive enumeration at boot. This is why the FDC driver ships before any floppy filesystem support.


PC Parallel Port LPT1 (a018249) — drivers/char/lpt

LPT1 at I/O ports 0x378–0x37A. The parallel port predates USB by two decades and remains a useful general-purpose 8-bit I/O bus. In sigilOS it is not a printing interface — it is a GPIO-level hardware bus for JTAG adapters, logic analyzers, and legacy test equipment. CLS_CHAR dispatcher. State at 0x8E0000.

Register map

DATA (0x378)
Bidirectional 8-bit data bus. Read/write verified with patterns 0xA5 and 0x5A in lpt_probe.
STATUS (0x379)
Read-only status lines: nBUSY (bit7, inverted), nACK (bit6), PAPER-END (bit5), SELECT (bit4), nERROR (bit3). Live QEMU STATUS = 0xD9.
CONTROL (0x37A)
STROBE (bit0), AUTO-LF (bit1), nINIT (bit2), SELECT-IN (bit3), IRQ-ENABLE (bit4), BIDIR (bit5). Bits 7:6 are stuck=1 in QEMU — hardware artifact; verification masks with % 64 == 12.

Driver operations

Practical note: The BIDIR mode (bit5) is especially useful beyond printing. With bit5 set, LPT1 becomes an 8-bit input port — a standard interface for inexpensive JTAG adapters (Wiggler, ByteBlaster) and legacy oscilloscope interfaces. sigilOS uses this mode to support hardware debugging without a dedicated JTAG controller.


Complete x86 driver inventory — all 12 verified

All drivers verified on live QEMU via x86-runverify:

DriverI/O PortsCLS ClassState Address
Intel 8253/8254 PIT0x40–0x43CLS_TIME0x820000
Intel 8259A PIC0x20 + 0xA0CLS_IRQ0x830000
Intel 8237A DMA0x00–0x0FCLS_DMA0x840000
NS16550A UART COM10x3F8CLS_SERIAL0x850000
PS/2 i80420x60 + 0x64CLS_INPUT0x860000
MC146818A RTC0x70 + 0x71CLS_TIME0x870000
PCI Config Space0xCF8 + 0xCFCCLS_BUS_PCI0x880000
Bochs BGA0x1CE + 0x1CFCLS_DISPLAY0x890000
QEMU fw-cfg0x510 + 0x511CLS_PLATFORM0x8A0000
PC Speaker0x61CLS_AUDIO0x8C0000
Intel 82077AA FDC0x3F0–0x3F7CLS_STORAGE0x8D0000
PC Parallel LPT10x378–0x37ACLS_CHAR0x8E0000

Every IBM PC-AT era device class is now represented: timers, interrupt controller, DMA, serial, input, RTC, PCI bus, display, platform config, audio, storage, and character I/O. The x86 ISA legacy layer is complete.