The PSP (#57, Sony, 2004) joins the fleet — MIPS Allegrex 32-bit CPU (custom MIPS32 r2 with VFPU) + 480×272 16:9 widescreen framebuffer, the first widescreen console in the sigilOS RetroPie fleet. sigil-fs adds ntfs_utime (modify-time write to $STANDARD_INFORMATION, Unix→FILETIME conversion) wired into vfsdev_utime_path — completing the VFS metadata-write surface alongside the already-wired content ops. MANIFEST 364, ALL PASS. (sigil-retropie 8b94b60; sigil-fs e1e7a52)
PSP — system #57 (8b94b60)
cores/psp.sg — Sony PlayStation Portable (2004). The PSP is the first widescreen console in the sigilOS fleet, and the first to carry a custom MIPS32 r2 core with a dedicated vector FPU.
CPU: MIPS Allegrex
The Allegrex is a 32-bit custom MIPS32 r2 core running at up to 333MHz. Its defining feature is the VFPU (Vector FPU): 128 vector registers arranged in a 4×4 matrix layout, designed for fast 3D math and DSP operations without touching the general-purpose register file. The VFPU is what allowed the PSP to run PlayStation-quality 3D games on a portable battery — software 3D transforms that would have required dozens of scalar FP instructions could be done in a single VFPU matrix multiply.
- 32-bit custom MIPS32 r2 core, 333MHz capable
- VFPU: 128 vector registers in 4×4 matrix layout; fast 3D/DSP math (modeled as stubs)
uart=57PASS. EL0 app:apps/psp, loads/roms/game.pbp(PSP executable format)
Framebuffer: 480×272 widescreen
480×272 pixels at 16:9 — the PSP was the first portable console to ship with a widescreen display. The render path supports both native modes:
- RGBA8888: maps directly to the output framebuffer (32-bit path)
- RGB565: expanded to ARGB via 5→8 / 6→8 / 5→8 channel scaling
psp_render copies the VRAM output buffer to the display framebuffer. First widescreen console in the fleet.
The PSP's place in the fleet
The PSP closes out the 6th-generation handheld slot. In context:
The MIPS Allegrex is the first MIPS core in the fleet — joining ARM9, V810, SH-2, 68000, Z80, 6502, 65C02, 6809, and now MIPS. The fleet's ISA coverage now spans all six major CPU families used in retro consoles.
ntfs_utime (e1e7a52 — sigil-fs)
ntfs_utime(name_ptr, namelen, mtime_filetime) writes a modify timestamp directly into the NTFS metadata structures for a named file.
- Locates the file via
ntfs_find(existing path lookup) - Writes the FILETIME to
$STANDARD_INFORMATIONmodify_timeandmft_changefields - Falls back to
$FILE_NAMEbytes 16/24 when$SIis absent
VFS wire: vfsdev_utime_path
vfsdev_utime_path takes a path + Unix timestamp (seconds since epoch) and dispatches to the correct per-FS implementation:
- NTFS: converts via
(mtime_unix + 11644473600) * 10000000(Windows epoch offset + 100ns units), callsntfs_utime - ext2: passes Unix timestamp directly via
ext2_utime - FAT/exFAT: returns -2 — callers use
fat_utime/exfat_utimedirectly with their native DOS/packed formats
Test: ntfs_utime_test — ABCDE (5/5). MANIFEST 364 entries, ALL PASS.
VFS metadata surface
With utime wired across all four filesystems, the VFS now covers both the content ops layer (create/write/rename/unlink/mkdir/rmdir/truncate/append) and the metadata ops layer (utime). The complete metadata surface:
| Op | NTFS | ext2 | FAT | exFAT |
|---|---|---|---|---|
utime (mtime) |
ntfs_utime |
ext2_utime |
fat_utime |
exfat_utime |
rename (same-dir) |
ntfs_rename_in |
— | fat_rename_in |
exfat_rename_in |
rename (cross-dir) |
ntfs_move_in |
— | fat_cross_rename |
exfat_cross_rename |
rmdir (nested) |
ntfs_rmdir_in |
— | — | — |
The VFS write + metadata surface is now the most complete it has ever been in sigil-fs history. MANIFEST 364, ALL PASS.