Two consoles land: Nintendo Wii (#59, 2006) — IBM Broadway PowerPC 729MHz + Flipper+ GPU + 64MB MEM1+MEM2 + 640×480; Nintendo 3DS (#60, 2011) — ARM11 MPCore ARMv6K + 400×240 top screen + 320×240 bottom (first multi-core ARM in the fleet). sigil-drivers adds QEMU firmware config (fw-cfg, signature QEMU, DMA cap, 13 fw_cfg files enumerated) and PC speaker (port 0x61 + PIT ch2 1kHz beep, CLS_AUDIO). sigil-fs extends the unified stat struct with mtime@24 (Unix seconds from ext2/NTFS; zero-default for FAT/exFAT/HFS+/ISO). MANIFEST 366, ALL PASS. (sigil-retropie 219d117, b803eb3; sigil-drivers 14f06fa, 8eaaed3; sigil-fs 736cc8c)
Nintendo Wii — system #59 (219d117)
cores/wii.sg. The Wii is the third G3-derived console in the fleet, following the GameCube and preceding the Wii U. uart=59 PASS. apps/wii (EL0), loads /roms/game.wii.
- CPU: IBM "Broadway" PowerPC stub — derived from the GameCube's Gekko (IBM 750CXe), clocked at 729MHz. Backward-compatible with GameCube software via the same paired-single FPU extension.
- GPU: Flipper+ (enhanced Flipper from GameCube). Still TEV-based but with higher fill rate.
- Memory: MEM1 (24MB GDDR3, low-latency) + MEM2 (64MB "Starlet" DDR2 for IOS). Total 88MB accessible.
- Output: 640×480 composite / 480p component.
wii_rendercopies to display fb.
PowerPC lineage: Broadway is the third G3-derived console CPU in the fleet — GameCube (Gekko 485MHz) → Wii (Broadway 729MHz) → future Wii U (Espresso 1.24GHz). All share the same HAL seam database (ppc_bat, ppc_htab, ppc_spr, ppc_tlb, ppc_altivec via the Wii's ES coprocessor).
Nintendo 3DS — system #60 (b803eb3)
cores/n3ds.sg. The 3DS is the first multi-core system in the fleet, and the first handheld with a glasses-free 3D display. uart=60 PASS. apps/n3ds (EL0), loads /roms/game.3ds.
- CPU: ARM11 MPCore (ARMv6K, dual-core stub) — the first multi-core system in the fleet. Each core can run independently; the primary core handles game code, the secondary handles OS services.
- ARMv6K extensions: K extensions enable VFPv2 floating-point, SWP exclusive ops, and User mode cache control — all needed for the DS's 3D rendering workload.
- Top screen: 400×240 native resolution (the "wide" screen, 5:3 aspect — unique among handhelds of the era). The 3DS added a glasses-free 3D lenticular layer on top.
- Bottom screen: 320×240 touchscreen (same resolution as the DS Lite).
n3ds_rendercopies both framebuffers.
Fleet milestone: with 60 LAUNCHABLE systems, sigilOS now targets more gaming platforms than many modern emulation OS solutions, all from a single capability-secure kernel.
QEMU fw-cfg driver (14f06fa — sigil-drivers)
drivers/platform/fw-cfg. QEMU's firmware configuration interface exposes the hypervisor's view of the hardware — RAM size, CPU count, boot device order, kernel command line — to the kernel via a simple I/O port pair.
- Interface: select port
0x510(outw index), data port0x511(inb reads). - Reads: signature (
QEMU= 0x51/0x45/0x4D/0x55), feature flags (bit 0 = traditional, bit 1 = DMA), RAM size, CPU count. - File directory:
0x19selector → BE32 file count, then LE32 size + LE16 select + name per file. - Live QEMU: signature=QEMU, feat=3 (traditional+DMA), 1 CPU, 13 fw_cfg files enumerated.
- Scratch buffer at
0x8B0000forpoke8/peek8. CLS_PLATFORM dispatcher. State at0x8A0000.
Significance: fw-cfg is the x86 kernel's window into the hypervisor's view of the hardware. This is how a sigilOS kernel running under QEMU discovers how much RAM the machine has, how many CPUs are present, and what boot media is available — without reading BIOS tables or probing hardware directly.
PC speaker driver (8eaaed3 — sigil-drivers)
drivers/audio/pcspeaker. The PC speaker is the simplest possible audio output — one square-wave oscillator connected to a physical speaker via I/O port 0x61. No DMA, no interrupts, no audio HAL required.
- Control: I/O port
0x61: bit 0 = gate PIT ch2, bit 1 = speaker enable.spkr_on= bits 0+1 set (value 3);spkr_offclears both (value 0). Bits 2–7 preserved on write. - Frequency:
spkr_set_freq(hz)reloads PIT ch2 (count = 1193182 / hz). Command byte 182 (SC_CH2 + RW_LOHI + MODE_SQWAVE) for square-wave output. probesaves/restores original port state.- Verified on QEMU: port 0x61 bits 0+1 r/w round-trip, PIT ch2 reload=1193 for 1000 Hz.
- CLS_AUDIO dispatcher: CTL_BEEP (on + freq) / CTL_MUTE (off) / CTL_GATE (PIT gate only). State at
0x8C0000.
Pairs with pit.sg: PIT ch0 (rate-gen, CLS_TIME) + PC speaker (CLS_AUDIO) together form the complete beeper stack. The kernel can now emit boot beeps and error tones without any audio HAL — just port I/O.
VFS stat mtime (736cc8c — sigil-fs)
The unified stat struct gains modification time — the last missing field needed for file managers and backup tools to display correct timestamps from real volumes.
The vfsdev_stat_path output buffer extends from 24 to 32 bytes: {otype@0, size@8, mode@16, mtime@24}. mtime is Unix epoch seconds (64-bit, little-endian). Initialized to 0 before dispatch so callers get a clean default on unsupported providers.
i_mtime directly from the inode (offset 16) — always populated. Full Unix timestamp available on any ext2 volume.$FILE_NAME LastModificationTime (FILETIME, 100ns intervals since 1601-01-01), converts to Unix via (ft / 10000000) - 11644473600. Guarded against zero FILETIME.Test: vfs_stat_mtime_test — ABCD (4/4). MANIFEST 366, ALL PASS.
Significance: File managers and backup tools can now read correct modification timestamps from ext2 and NTFS volumes. The stat struct is the standard read surface; the utime VFS contract (fully wired in 1dceee1) is the write surface.
Summary
| Repo | What shipped | Commits |
|---|---|---|
| sigil-retropie | Wii #59 (Broadway 729MHz, 640×480) + 3DS #60 (ARM11 MPCore, dual-screen) | 219d117, b803eb3 |
| sigil-drivers | QEMU fw-cfg (sig+DMA+13 files) + PC speaker (PIT ch2 1kHz, CLS_AUDIO) | 14f06fa, 8eaaed3 |
| sigil-fs | stat mtime@24 — ext2 (i_mtime) + NTFS (FILETIME→Unix); zero-default others | 736cc8c |
MANIFEST 366, ALL PASS.