← Blog
VIDEO · DRIVERS · 0.6.0

LCARS Boot Banner + NS16550A UART + Intel 8259A PIC — x86 Real-Silicon Stack Complete

June 22, 2026 · sigil-video / sigil-drivers · Sigil-Docs
video lumen boot drivers x86 0.6.0

Three landings that together close the x86 real-silicon peripheral stack: lcars_boot_banner draws a full-screen LCARS boot splash on the GOP framebuffer (orange top band + "SIGIL" in gold via lcars_gch_cov + tan accent), the NS16550A UART driver (COM1, SCR probe, baud divisor, 8N1 LCR, FIFO enable, loopback echo, CLS_SERIAL), and the Intel 8259A PIC master/slave cascade (IMR round-trip, ISR/IRR probe, IRQ1 mask/unmask, non-specific EOI, CLS_IRQ). With PIT + i8042 + RTC already shipped, the x86 port-I/O driver set is now complete for real-hardware bring-up. (sigil-video 9684cde; sigil-drivers 9fb80cd, 213ff01)

lcars_boot_banner: orange top + SIGIL in gold + tan bottom, GOP framebuffer boot splash
lcars_boot_banner: orange top + "SIGIL" in gold + tan bottom, GOP framebuffer boot splash. LCARS-BOOT-PASS.

lcars_boot_banner (9684cde) — GOP framebuffer boot splash

This is the first thing a user sees when sigilOS boots on real x86 hardware. The banner fires after GOP maps the framebuffer and before the Lumen desktop compositor takes over.

lcars_boot_banner(fb, pitch, fbw, fbh, bh) — called once after GOP framebuffer is mapped, before kernel hands off to Lumen.

Layout (vertically stacked, full-width):

Top band
bh pixels tall, full width, lcars_orange(). The LCARS signature stripe.
Center band
2×bh pixels tall, black background, holds "SIGIL" (5 chars) in lcars_gold() via lcars_gch_cov (the AA cov_blend path).
Bottom accent
bh/2 pixels tall, full width, lcars_tan(). Accent band beneath the text.

GPU path: gpu_submit rect-fill (CAP_ACCEL; silicon-pending). SW path: lcars_fill_rect fill_span rows — the Pi3-floor fallback.

Test (160×120, bh=16): top band=orange, bottom band=tan, center=black, gold glyph pixel lit, pixel above top band=clear.

LCARS-BOOT-PASS top=ok bot=ok center=ok glyph=ok clear=ok

NS16550A UART (9fb80cd — sigil-drivers) — COM1 serial driver

Ports: base 0x3F8. Register map: RBR/THR (0), IER (1), IIR/FCR (2), LCR (3), MCR (4), LSR (5), MSR (6), SCR (7).

Full init sequence: IER disable → set DLAB → write baud divisor → clear DLAB → 8N1 LCR → FCR FIFO enable+clear (0xC7) → MCR DTR+RTS.

Live QEMU verified:

CLS_SERIAL dispatcher: OP_INIT / PROBE / READ / WRITE / CTL_FLUSH / CTL_BAUD. State at 0x850000.


Intel 8259A PIC (213ff01 — sigil-drivers) — master/slave cascade

Two 8259A chips in cascade: master at 0x20/0x21, slave at 0xA0/0xA1. ICW1-4 initialization remaps master vectors to INT32, slave to INT40.

Live QEMU verified:

pic_mask / pic_unmask via power-of-2 loop (no bitwise — consistent with drivers convention). Non-specific EOI: 0x20 to master, 0xA0 to slave.

CLS_IRQ dispatcher: CTL_IRQ_MASK / UNMASK / EOI / READ_ISR / READ_IRR. State at 0x840000.


The complete x86 port-I/O driver set

With PIT + i8042 + RTC previously shipped and PIC + UART landing now, every port-I/O peripheral required for a real-hardware x86 boot path is wired. Together with the GOP framebuffer (MMIO), the LCARS boot banner, and apple_secboot chain-of-trust, the sigil-os#18 x86 real-hardware boot path has all required peripheral drivers.

DriverPortsClassPASS
MC146818A RTC0x70/0x71CLS_TIME
Intel 8042 PS/20x60/0x64CLS_INPUT
Intel 8253/8254 PIT0x400x43CLS_TIME
Intel 8259A PIC0x20/0x21, 0xA0/0xA1CLS_IRQ
NS16550A UART0x3F8CLS_SERIAL