Two housekeeping wins shipped today: the RetroPie fleet ticks to 46 LAUNCHABLE with WonderSwan Color, and sigil-fs closes a long-standing coverage gap — 41 tests that passed in isolation but were never counted now register in MANIFEST. The harness hits 354/354 ALL PASS. (sigil-retropie 13907b5, sigil-fs c47c19d, d575980)
WSC — system #46 (13907b5)
WonderSwan Color is implemented as a thin overlay (cores/wsc.sg) over cores/ws.sg via first-def-wins. Only the functions that differ from monochrome WonderSwan need to be defined; everything else — V30MZ CPU behavior, memory map, input handling — is inherited at zero cost.
What WSC overrides
ws_tile_color: reads RGB444 from the palette atws_mem+0x44000(256×2-byte entries). R=bits[11:8], G=[7:4], B=[3:0]. Scaled to 8-bit via ×17 — so0xF×17=255with no lookup table needed.wsc_render_row: shift-register 4-plane expand. WSC tiles are 32 bytes (vs WS's 16) because the fourth color plane doubles the per-tile data.ws_render: 4bpp tile format, VRAM base atvram+8192.
Core metadata: core_id=9901. Palette base: wsc_pal() at ws_mem+0x44000.
Tests
wsc_core.sg — uart=53 PASS. Covers: palette decode, render_row (all-black / all-white / red channel), core ABI.
wsc_render.sg — self-contained screendump harness. 16-color diagonal band demo. 32256 non-black pixels confirms the full color output path is live.
Launcher
apps/wsc (37304 B, arm-el0): loads /roms/game.wsc (1MB cap). Launcher: rp_count 45→46, rp_title(45)="wonderswan color".
sigil-fs: 41 orphaned tests wired (d575980, c47c19d)
The FS harness had tests built but not registered in MANIFEST — they passed in isolation but were invisible to the run-all harness and not counted in the total. Two cleanup commits wire all of them in.
d575980 — 19 network tests
NFS3 and SMB2 codec tests that were built standalone but missing from MANIFEST:
- NFS3: XGALRDE, LINK, WRITE, SPECIAL, READLINK, FSSTAT, READDIR, READDIRPLUS, RENAME, REMOVE, MKNOD, FSINFO, FSATTR, READLINK, COMMIT, IOCTL
- SMB2: NEGOTIATE/HELLO/GETATTR/FINDFILES/READFILE/FLUSH/LOCK/SETINFO/RENAME/QUERY_INFO/CHANGE_NOTIFY/LOGOFF/ECHO
Also: nfs3.sg and smb2.sg now inline the statfs codecs directly, removing cross-file dependencies that broke standalone builds. VFS dev statfs is replaced with a real smb2_vfs_statfs call.
c47c19d — 22 more tests
- Block tests: low-level block device coverage previously skipped by the manifest walker
- btrfs (5): FR, DTNE, FRDTNE, AB — CoW filesystem path coverage
- crypto: aead, sha256
- CAS (11): DCH, RBH, BPE, PMV, DK, PCT, SMG, IRU, MT, BMS, CNE/GUA/PSV — content-addressed storage paths
- CAP: cap_manifest, cap_provision
Result
354/354 ALL PASS
Every FS test that exists is now counted. The gap between "passes in isolation" and "counted in CI" is closed.
The first-def-wins pattern in RetroPie
WSC is the cleanest example of the pattern that powers the entire RetroPie fleet. Because sigilOS's link model resolves symbols first-def-wins, a "variant" core only needs to define the functions that differ — the linker fills in everything else from the base core.
| Core | Base | Overrides | Inherited |
|---|---|---|---|
wsc.sg |
ws.sg |
tile_color, render_row, ws_render | V30MZ CPU, memory map, input |
gba.sg |
gb.sg |
ppu, palette (15-bit) | ARM7TDMI core, cartridge |
smsgg.sg |
sms.sg |
VDP mode 4 color | Z80, sound, input |
WSC overrides 3 functions and inherits the rest — zero code duplication for shared behavior. The pattern scales: every variant core in the fleet that targets a "color upgrade" of a monochrome system uses the same approach. First-def-wins is not a workaround; it's the designed extension point.