← Blog
RETROPIE · FS · 0.6.0

RetroPie #58: GameCube (PowerPC Gekko + 640×480 EFB) + FAT/exFAT Timestamp Complete

June 22, 2026 · sigil-retropie / sigil-fs · Sigil-Docs
retropie gaming fs fat 0.6.0

The Nintendo GameCube (#58, 2001) joins the fleet — IBM PowerPC 750CXe "Gekko" (485 MHz, paired-single FPU) + Flipper GPU + 640×480 EFB (Embedded FrameBuffer). sigil-fs completes the utime surface: fat_utime_in writes FAT/exFAT timestamps for files inside subdirectories, unix_to_fat_packed converts Unix timestamps to the FAT packed 32-bit format via a Gregorian calendar loop. All four VFS utime providers are now fully wired: ext2, NTFS, FAT, exFAT. MANIFEST 365, ALL PASS. (sigil-retropie e8bba56; sigil-fs 1dceee1)

GameCube system #58 — Gekko PowerPC + 640x480 Flipper EFB rainbow checkerboard demo
GameCube (system #58) — Gekko PowerPC + 640×480 Flipper EFB, rainbow checkerboard demo

GameCube — System #58 (e8bba56)

cores/gamecube.sg brings up the Nintendo GameCube as a full sigilOS retropie system entry. The GameCube (2001) pairs an IBM PowerPC CPU with Nintendo's custom Flipper GPU — hardware that shares its lineage with the iMac G3 sitting on the same PowerPC 750 family tree.

CPU — Gekko
IBM PowerPC 750CXe "Gekko" stub — G3-derived, 485 MHz. Paired-single FPU extension (PS instructions for fast vector math, a GameCube-unique ISA extension not present in desktop G3s).
Flipper GPU
Nintendo's custom GPU — triangle setup, TEV (Texture Environment) combiners. EFB (Embedded FrameBuffer) is on-chip at 640×480 direct-color. gc_render copies the EFB to the display framebuffer.
XFB + VI
External FrameBuffer output via the VI (Video Interface) to composite/component TV output. The XFB lives in main RAM; the VI scans it out.
Memory
Main RAM 24 MB at 0x80000000 (Gekko physical), texture memory, ARAM (Audio RAM) 16 MB.

uart=58 PASS. apps/gamecube runs at EL0, loads /roms/game.iso (GCN ISO image format).

Significance: The GameCube is the first G3-derived core in the fleet that also exists in the HAL seam database. The same HAL primitives that model the iMac G3 — ppc_spr, ppc_bat, ppc_htab, ppc_tlb — all apply to the Gekko. The console and the desktop Mac share a kernel-level abstraction layer.


The PowerPC Lineage in the Fleet

The GameCube's Gekko is PowerPC 750CXe — the embedded and console sibling of the desktop G3. A single HAL seam layer covers all three generations:

ConsoleCPUClockPPC family
GameCube (#58)IBM 750CXe "Gekko"485 MHzG3 (750-derived)
(future) WiiIBM 750CL "Broadway"729 MHzG3+
(future) Wii UIBM 750-derived "Espresso"1.24 GHzG3++

The HAL seam layers (ppc_bat, ppc_tlb, ppc_mace, ppc_heathrow, ...) that model the PowerMac G3's hardware also form the basis for the GameCube and its successors. When the Wii and Wii U arrive, most of the HAL groundwork is already laid.


fat_utime_in + unix_to_fat_packed — sigil-fs (1dceee1)

sigil-fs completes the FAT timestamp write surface with two functions that together close the last gap in VFS utime coverage.

unix_to_fat_packed

unix_to_fat_packed(unix_sec) converts a Unix epoch timestamp (seconds since Jan 1, 1970) to the FAT packed 32-bit timestamp format.

fat_utime_in

fat_utime_in(dir_clus, name11, date, time) sets WrtDate/WrtTime for a file inside a FAT subdirectory cluster chain. This mirrors the existing fat_utime for root-directory files — same directory-entry scan logic, different entry-point path (cluster chain walk vs. root sector scan).

VFS wire

vfsdev_utime_path now handles both FAT (calls fat_utime[_in] via vfs_to83 name conversion + unix_to_fat_packed split into date/time words) and exFAT (calls exfat_utime[_in] via packed32). The dispatch is transparent to callers — pass a path and a Unix timestamp, get the correct on-disk format for whichever filesystem is mounted.

Test: fat_utime_in_test — ABCDE (5/5). MANIFEST 365 entries, ALL PASS.


Full utime VFS Surface — All Four Providers Wired

Every filesystem a userspace file manager would touch now supports timestamp preservation when moving or copying files. The conversion math is correct for each format's epoch and resolution:

Filesystemutime functionTimestamp formatWire path
ext2 ext2_utime Unix 32-bit seconds direct
NTFS ntfs_utime FILETIME (100 ns since 1601) (t + 11644473600) × 10000000
FAT fat_utime_in / fat_utime FAT packed 32-bit unix_to_fat_packed → date/time split
exFAT exfat_utime_in / exfat_utime FAT packed 32-bit same packed32

With all four providers complete, a file manager can move a file from an ext2 partition to a FAT32 SD card — or an exFAT USB drive — and preserve the original modification timestamp with correct format conversion at each hop. No timestamp is silently reset to the transfer time.