← Blog
DRIVERS · 0.6.0

VGA CRTC + DAC Drivers — 14 x86 Drivers, Complete VGA Subsystem

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

The VGA subsystem is complete. Two new drivers ship in this batch: the VGA 6845 CRTC driver (cursor, start-address scroll, display/vsync status, 80-column mode 3 verified) and the VGA DAC palette driver (256-entry 6-bit RGB, CGA-standard color 7, CTL_SET_COLOR/GET_COLOR/BLANK/UNBLANK). Together with the Bochs BGA driver (post-BIOS GOP), sigilOS now has a complete three-layer x86 display stack: mode-set → raster timing → color output. Total: 14 verified x86 drivers. (sigil-drivers 4188d1a, 2c63577)

sigilOS desktop — Lumen with complete VGA display stack
sigilOS desktop running with the complete VGA display stack: BGA mode-set + CRTC raster + DAC palette

VGA 6845 CRTC driver

Commit 4188d1a. Driver: drivers/display/vga-crtc. State at 0x8F0000. CLS class: CLS_DISPLAY.

The Motorola 6845 CRT Controller is the core of the IBM VGA standard and its MDA/CGA predecessors. It controls raster scan timing, cursor position, and display start address — the three things that determine what appears on screen and where the cursor blinks.

CLS_DISPLAY dispatcher: CTL_CURSOR_GET / CTL_CURSOR_SET / CTL_CURSOR_HIDE / CTL_CURSOR_SHOW / CTL_SCROLL.


VGA DAC palette driver

Commit 2c63577. Driver: drivers/display/vga-dac. State at 0x900000. CLS class: CLS_DISPLAY.

The VGA palette DAC converts 8-bit color indices to physical RGB output. In VGA text mode and 256-color graphics modes, every pixel is an 8-bit index into this 256-entry table; the DAC performs the lookup to produce analog RGB voltages. Each entry holds R/G/B values at 6-bit resolution (0–63), giving 18-bit color depth in total.

CLS_DISPLAY dispatcher: CTL_SET_COLOR / CTL_GET_COLOR / CTL_BLANK / CTL_UNBLANK.


The complete VGA display stack

With both drivers verified, sigilOS has full programmatic control over every layer of the IBM VGA pipeline. The three drivers compose into a complete stack:

LayerDriverState addrWhat it controls
DACvga-dac0x900000256-entry palette, physical RGB output
CRTCvga-crtc0x8F0000Raster timing, cursor position, display scroll
Mode-setbga0x890000Resolution + color depth (post-BIOS GOP)

The kernel can now: set a native resolution via BGA → configure the raster via CRTC → program the 256-color palette via DAC → display text or graphics. The full VGA pipeline from scan timing to color output is under Sigil-level control. No BIOS calls needed after initial boot — the drivers own the hardware directly.


Complete x86 driver inventory — 14 verified

All 14 drivers verified on live QEMU via x86-runverify.

DriverI/O PortsCLS ClassState
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
VGA 6845 CRTC0x3D4+0x3D5CLS_DISPLAY0x8F0000
VGA DAC Palette0x3C7–0x3C9CLS_DISPLAY0x900000

The state address space runs contiguously from 0x820000 (PIT) through 0x900000 (DAC), covering all 14 x86 platform devices. The three CLS_DISPLAY drivers — BGA, CRTC, DAC — span 0x8900000x900000, the top of the current x86 driver block.