Files
libretro/emulators/pokketstation.yml
T
Abdessamad Derraz 1fb7b1572e feat: profile geartowns, coolbaremu and xenia_edge
The buildbot publishes four cores no profile named. Geartowns (FM
Towns) and CoolbarEmu get profiles read from their source, Xenia Edge
gains its libretro build, and pokketstation follows its repository's
rename to Pokket, re-read at HEAD.
2026-10-17 13:40:17 +02:00

68 lines
3.7 KiB
YAML

emulator: pokketstation
type: libretro
core_classification: official_port
source: "https://github.com/mentalfoundry/Pokket"
upstream: "https://github.com/mentalfoundry/Pokket"
profiled_date: "2026-10-17"
source_commit: "de736cee392567d58e842f96afe77f707e694ce5"
core_version: "v1.23"
display_name: "Sony - PocketStation (pokketstation)"
cores: ["pokketstation", "pokket"]
systems: [sony-pocketstation]
notes: |
PocketStation emulator with a portable C core (core/) shared by the libretro
core, an SDL2 and Win32 desktop application built on Windows only
(frontends/desktop/CMakeLists.txt:1-16), a PS Vita port and an Emscripten build.
The libretro target is pokket_libretro (frontends/libretro/CMakeLists.txt:10-16).
Both the libretro core and the desktop application report POKKET_VERSION,
v1.23 from the project() line of the root CMakeLists.txt (CMakeLists.txt:4-5,
frontends/libretro/libretro.c:189-196).
read_bios opens <system>/pocketstation.bin, reads 16384 bytes and fails when
fewer are read; a longer file is accepted and truncated
(frontends/libretro/libretro.c:545-559). psemu_load_bios copies the image and
rejects any size other than PSEMU_BIOS_SIZE (core/src/psemu.c:92-99).
retro_load_game returns false when read_bios fails, and psemu_run executes
nothing while no BIOS is loaded: there is no HLE and no embedded copy
(frontends/libretro/libretro.c:586-595, core/src/psemu.c:808-812). The IR
Link subsystem runs two units in one core and loads the same file into both
(frontends/libretro/libretro.c:652-693).
Content (.mcr, .mcs, .pss, .mcd, .bin, .gme) is identified by its bytes,
not by the extension: a 128 KB image is a full card, a file opening with
123-456-STD followed by a whole number of 8 KB blocks up to a full card
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:113-140,
211-234, 326-347). 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
(core/src/psemu.c:1150-1175). 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. SWI 0Fh FlashWriteSerial works on 061 and locks the CPU on
110 (docs/hardware-notes.md:1046-1056).
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 and
writes it to settings.cfg (frontends/desktop/main.c:653-700, 1216-1254,
3016-3020, 3071-3091). The Vita frontend loads no BIOS yet
(frontends/vita/main.c:31-33), and the Emscripten build leaves the BIOS to
the hosting page (frontends/web/README.md:35).
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:545-559, frontends/libretro/libretro.c:586-595, core/src/psemu.c:92-99, core/src/psemu.c:808-812, core/src/psemu.c:1150-1175, 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.