Skip to content

ARMSX1 - RetroBIOS

Type standalone
Classification Community forks
Source https://github.com/ARMSX2/ARMSX1
Upstream https://github.com/allkern/psxe
Version 0.1.3
Profiled 2026-08-11
Cores armsx1
Systems sony-playstation
BIOS size 524288
BIOS directory bios/
Checked by existence
Technical notes

PlayStation emulator forked from psxe, rebuilt around SDL2 frontends and a Dear ImGui fullscreen shell. Desktop, Android, iOS, UWP, WebAssembly and PSVita builds come out of one tree. The Android application is com.nanodata.armsx with the activity com.armsx2.Main, and its Compose launcher hosts the same core in process. ref: README.md:1-2, android/app/build.gradle:71-79, android/app/src/main/AndroidManifest.xml:78-92

A BIOS image is required. Boot stops before a session exists when no path resolves, and again when the file cannot be read. Skip BIOS does not change that: the image runs from reset and the hook only takes over at the shell entry point, once the kernel is built. ref: frontend/main.cpp:2529-2549, psx/psx.c:249-252, psx/fastboot.h:45, psx/fastboot.c:225-239

psxe_cfg_get_bios_path answers in three steps: the override file when it exists, then a scan of the search folder, then the override path unchanged. The override is [bios].override_file or -b and defaults to bios.bin under the preference path SDL_GetPrefPath("nanodata", "armsx"); the search folder is [bios].search_path or -B and defaults to the relative path bios. ref: frontend/config.c:1540-1559, frontend/config.c:1385-1404, frontend/config.c:677-683, frontend/config.c:54-57

The scan reads that folder once, keeps .bin and .rom, and returns the entry named bios.bin. Its other branch compares [bios].preferred_model against each filename through a normaliser that drops every non-alphanumeric character and lowercases the rest, applied to the name including its extension, so scph1001.bin normalises to scph1001bin and no model value equals it. A name carrying no extension, which would, is dropped by the extension filter first. ref: frontend/config.c:292-357, frontend/config.c:226-247, frontend/config.c:249-260

Nothing identifies the image beyond that. No name table, no size test, no hash. The loader takes the file's own length, allocates it, and the bus maps the device from 0x1fc00000 over that same length, which is how the 1 MB SCPH-5903 image stays addressable in full. ref: psx/dev/bios.c:21-54, psx/bus.c:50-54, psx/dev/bios.h:8-10

preferred_model carries 22 values, SCPH-1000 through SCPH-102C, printed by --help-model and mirrored by the Android model picker. ref: frontend/config.c:177-200, android/app/src/main/java/com/armsx2/config/Ps1Settings.kt:416-423

On Android the preference path is the application files directory, so settings.toml and the default bios.bin sit there. The BIOS picker copies the chosen dump to user_bios.bin and writes its absolute path into [bios].override_file. EmulatorActivity passes --bios /bios.bin when the package carries an assets/bios.bin, and the in-process launcher repeats that check with stat; release 0.1.3 ships no such asset. ref: android/app/src/main/java/com/armsx2/core/Ps1Config.kt:20-41, android/app/src/main/java/com/armsx2/ui/settings/Ps1BiosTab.kt:38-48, android/app/src/main/java/com/nanodata/armsx/EmulatorActivity.java:58-61, android/app/src/main/java/com/nanodata/armsx/EmulatorActivity.java:95-99, frontend/android_jni.cpp:1708-1743, ARMSX1-0.1.3-release.apk assets

The remaining paths the core opens are per game, and are written by the emulator or picked by the user: memory cards, created blank at first use; save states, rewind snapshots and screenshots; a GameShark .cht catalogue named by [cheats].cheats_file; and content-addressed PNG packs under the replacements folder of [video].texture_dir. ref: psx/dev/mcd.c:139-154, psx/cheats.c:346-390, psx/texrep.c:846-848

2 files | 1 required, 1 optional | 1 in repo, 1 missing

scph1001.bin required in repo
PlayStation BIOS image

<expansion>.rom optional missing
Expansion port ROM image

Generated on 2026-08-23T16:12:06Z