emulator: pokketstation type: libretro core_classification: official_port source: "https://github.com/mentalfoundry/pokketstation" upstream: "https://github.com/mentalfoundry/pokketstation" profiled_date: "2026-09-17" source_commit: "484933271b7d362e8e76f1121839c33e5d5ec83e" core_version: "v1.12" display_name: "Sony - PocketStation (pokketstation)" cores: [pokketstation] systems: [sony-pocketstation] notes: | PocketStation emulator with a portable C core (core/) shared by the libretro core, an SDL2 desktop application and a PS Vita port. The libretro core reports library_version "0.1"; the project version is the release tag, v1.12 in the desktop frontend (frontends/desktop/main.c:40). load_bios opens /pocketstation.bin, reads 16384 bytes and fails when fewer are read; a longer file is accepted and truncated. psemu_load_bios copies the image and rejects any size other than PSEMU_BIOS_SIZE. retro_load_game returns false when load_bios fails, and psemu_run executes nothing while no BIOS is loaded: there is no HLE and no embedded copy. Content (.mcr, .mcd, .mcs, .pss, .bin, .gme) is identified by its bytes, not by the extension: a 128 KB image is a full card, a 134976-byte file opening with 123-456-STD is a DexDrive dump whose 3904-byte header is skipped, anything else is tried as a single save then as a Title Sector body (core/src/psemu.c:187-209, 301-317). Save RAM is the full 128 KB flash image. psemu_settings_offsets_known hashes the loaded image with FNV-1a and compares it with 0xB2E46838, the retail 110 revision the project traced; a match enables the date, time and volume override writes into kernel RAM. Any 16 KB image boots. Two mask ROM revisions are documented: 061, from prototype hardware, and 110, the retail one; the ASCII tags at offsets 0x1DFC (C061 or C110) and 0x3FFC (J061 or J110) identify them (docs/hardware-notes.md:782-792). SWI 0Fh FlashWriteSerial works on 061 and locks the CPU on 110. The desktop application takes the BIOS path from the command line, then from the bios= key of settings.cfg beside the executable, then falls back to bios.bin beside the executable; File > Load BIOS opens any path (frontends/desktop/main.c:630-668, 1000-1035, 2380-2451). The Vita frontend loads no BIOS yet (frontends/vita/main.c:31-33). files: - name: "pocketstation.bin" description: "PocketStation BIOS ROM, kernel and GUI, 16 KB" size: 16384 required: true validation: [size] standalone_path: "bios.bin" source_ref: "frontends/libretro/libretro.c:178-196, frontends/libretro/libretro.c:206-208, core/src/psemu.c:90-97, core/src/psemu.c:474-477, core/src/psemu.c:854-879, core/include/psemu/psemu.h:19" note: > Read from the frontend system directory. The desktop application reads the whole file and psemu_load_bios rejects any size other than 16384; the libretro core reads the first 16384 bytes. FNV-1a 0xB2E46838 identifies the retail 110 revision for the settings overrides only.