← Blog
RETROPIE · FS · 0.6.0

RetroPie #53–55: 3DO, Pokémon Mini, Vectrex + FAT/exFAT Cross-Directory Rename

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

Three more consoles push the fleet to 55 LAUNCHABLE: 3DO (#53, ARM60 32-bit RISC + MADAM/CLIO custom chips, 320×240 direct-color), Pokémon Mini (#54, Seiko S1C88 8-bit CPU + 96×64 1-bit LCD — the smallest cartridge console ever made), and Vectrex (#55, Motorola 6809 + vector display, the only vector-scan home console). sigil-fs completes FAT and exFAT cross-directory rename: fat_cross_rename and exfat_cross_rename handle all four root/subdir cross combinations. MANIFEST 362, ALL PASS. (sigil-retropie 9f91050, 6cbaac9, a336f7f; sigil-fs 4849d53)

3DO Interactive Multiplayer (system #53) — ARM60 + MADAM/CLIO, 320×240 direct-color checkerboard
3DO Interactive Multiplayer (system #53) — ARM60 + MADAM/CLIO, 320×240 direct-color checkerboard demo

System #53: 3DO Interactive Multiplayer

Commit 9f91050. Core: cores/threedoo.sg. The 3DO was the first 5th-generation console (1993), built around an ARM60 CPU — the direct ancestor of every ARM Cortex core in production today — paired with two custom ASICs that handle all media acceleration.

ARM60 CPU
32-bit RISC stub. Same ARM ISA lineage as the GBA and NDS cores already in the fleet, but a distinct core_id for 3DO-specific peripheral mapping.
MADAM
Math And Display Accelerator/Manager. Handles sprite compositing, cel rendering (the 3DO's proprietary layered cel graphics), blitter DMA, and geometry processing. The 3DO's "GPU" equivalent.
CLIO
I/O and system controller. Interrupt controller, VRAM DMA, CD-ROM interface, and joystick port multiplexer. All peripheral I/O routes through CLIO.
Framebuffer
320×240 direct-color (16-bit RGB555). Same resolution as the Atari Jaguar. MADAM composites cels directly into this framebuffer.

uart=53 PASS. apps/threedoo (EL0), loads /roms/game.iso (CD image).

Pokémon Mini (system #54) — S1C88 + 96×64 1-bit LCD, striped demo
Pokémon Mini (system #54) — Seiko S1C88 + 96×64 1-bit LCD (6,144 pixels total), striped demo pattern

System #54: Pokémon Mini

Commit 6cbaac9. Core: cores/pokemini.sg. The Pokémon Mini (Nintendo, 2001) is the smallest cartridge-based game console ever manufactured at 43×76×31mm. It has the smallest display in the fleet.

Seiko S1C88 CPU
8-bit CPU stub. Accumulator + index registers, basic arithmetic, branch, and call instructions. Custom Seiko design — not a standard Z80 or 6502 derivative.
Display
96×64 1-bit LCD (monochrome, pixel = black or white). 6,144 pixels total — 96×64 / 8 = 768 bytes of VRAM at address 0x1000.
pm_render
Unpacks 1-bit VRAM (8 pixels per byte): bit=1 → black (0xFF000000), bit=0 → white (0xFFFFFFFF). Expands to 32-bit ARGB for the Lumen framebuffer compositor.
Memory map
VRAM at 0x1000 (768 bytes), ROM at 0x8000. Cartridge ROM format: .min.

uart=54 PASS. apps/pokemini (EL0), loads /roms/game.min. Smallest display in the fleet (96×64).

Vectrex (system #55) — 6809 + 256×256 vector display, line-drawing demo
Vectrex (system #55) — Motorola 6809 + 256×256 vector coordinate space, line-drawing demo rasterized via Bresenham

System #55: Vectrex

Commit a336f7f. Core: cores/vectrex.sg. The Vectrex (1982) is the only vector-scan console in the fleet — and the only consumer vector display product ever sold as a standalone home console. Every other system in the fleet uses raster scan.

Motorola 6809
Same m6809.sg family used by ColecoVision and other 6809-based cores in the fleet, assigned a distinct core_id for Vectrex-specific peripheral mapping.
Vector display
256×256 coordinate space. Line-drawing model: vec_line(x0, y0, x1, y1, bright). No raster scan — the hardware draws geometric primitives directly to the phosphor screen via analog X/Y deflection.
vx_render
Converts the vector display list to a raster framebuffer using Bresenham line rasterization. Brightness maps to pixel intensity. Unique in the fleet: the only non-raster display model.

uart=55 PASS. apps/vectrex (EL0), loads /roms/game.vec.


The Fleet at 55

The range now spans from the Atari 2600 (1977) to the Pokémon Mini (2001) — 24 years of home console and handheld history in a single fleet. Systems #53–55 represent three distinct engineering eras:

System#YearCPUDisplayUnique trait
3DO Interactive Multiplayer531993ARM60 32-bit320×240 RGB555First 5th-gen console; ARM ancestor
Pokémon Mini542001S1C88 8-bit96×64 1-bit LCDSmallest cartridge console ever
Vectrex551982M6809256×256 vectorOnly vector-scan home console

The first-def-wins architecture continues to pay dividends: 8 systems in the fleet are pure overlays on a shared parent core (Sega Pico over Sega CD, 3DO-family over ARM, S1C88 shared across Seiko-based handhelds, m6809 across multiple 6809-based systems). Each overlay costs only the peripheral delta — not a full reimplementation.


FAT + exFAT Cross-Directory Rename

Commit 4849d53 (sigil-fs). The last gap in the VFS write surface: moving a file between directories on a FAT or exFAT volume. Same-parent renames (fat_rename_in, exfat_rename_in) were already covered; this adds the cross-directory variants.

fat_cross_rename
fat_cross_rename(src_clus, old11, dst_clus, new11): find old_name in source directory (0 = FAT root region, non-zero = cluster chain), tombstone it (mark entry as deleted), add new_name to destination directory. 0 as either cluster argument addresses the FAT root region.
exfat_cross_rename
exfat_cross_rename(src_clus, old, oldlen, dst_clus, new, newlen): same contract for exFAT. Uses exfat_make_entryset_in for the destination write; follows FAT chain for multi-cluster source directories.
VFS wire
vfsdev_rename_path resolves both old and new parent directories for FAT and exFAT, routes to the cross-rename variant when they differ, and falls back to the in-directory variant when same-parent.

All four cross-directory combinations are covered: root→subdir, subdir→root, subdir→subdir, and same-parent name change (which routes to the existing in-dir path). Tests: fat_crossrename (ABCDEF, PASS), exfat_crossrename (ABCDEF, PASS). MANIFEST 362 entries, ALL PASS.