Skip to content

ARMSX2 - RetroBIOS

Type standalone + libretro
Classification Community forks
Source https://github.com/ARMSX2/ARMSX2
Upstream https://github.com/PCSX2/pcsx2
Version 2.6.6.5
Profiled 2026-08-11
Cores armsx2, armsx2_libretro
Systems sony-playstation-2
BIOS directory bios/
Resources directory resources/
Technical notes

PlayStation 2 emulator, a GPL-3.0 fork of PCSX2 that replaces the x86-64 only EE, IOP, VU and vtlb fast memory recompilers with native AArch64 ones. One tree builds the Android application com.armsx2, an iOS package, macOS, Windows and Linux on arm64, an SDL handheld frontend, and a libretro core. ref: README.md:1-24, platforms/android/app/build.gradle.kts:17-74, .github/workflows/build-all.yml:79-85

A BIOS image is required and boot stops without one: LoadBIOS returning false makes VMManager report that a PlayStation 2 BIOS is needed and return a startup failure. Only a GS dump replay skips the load. The folder is Bios under the data directory, bios by default, and on Android the setup wizard keeps it in app-private storage because the native file APIs cannot reliably open a dump off a SAF volume. ref: pcsx2/ps2/BiosTools.cpp:332-348, pcsx2/VMManager.cpp:1592-1607, pcsx2/Pcsx2Config.cpp:2498, platforms/android/app/src/main/java/kr/co/iefriends/pcsx2/NativeApp.java:82-93

Detection is by content. The scan lists the BIOS folder, keeps files between 4 and 8 MB, and accepts an image whose romdir carries a RESET entry followed by a readable ROMVER; the fifth ROMVER character gives the zone among Japan, USA, Europe, Asia, China, T10K, COH-H, Test and Free, and an EXTINFO entry supplies the serial. An image named in the configuration is opened at its own path, without the size filter. No name and no hash is matched anywhere. The image is read into the 4 MB ROM region and truncated to it, and one shorter than 2465792 bytes turns off the OSDSys parameter HLE. IsBIOSFromFd runs the same romdir test on a file descriptor, which is how the Android picker identifies a dump handed over by the storage framework. ref: pcsx2/ps2/BiosTools.cpp:16-17, pcsx2/ps2/BiosTools.cpp:80-197, pcsx2/ps2/BiosTools.cpp:258-309, pcsx2/ps2/BiosTools.cpp:350-373

Companions derive from the selected image. rom1 and rom2 are appended to the full name first, then substituted for the existing extension, so an image at ps2-0230a-20080220.bin is followed by ps2-0230a-20080220.bin.rom1 then ps2-0230a-20080220.rom1, and the open retries case-insensitively. Both regions are 4 MB here. The nvm and the mec are read at the substituted extension only; the nvm is rebuilt in memory with region and language defaults when it is missing or its config block is blank, and the mec is written back to disk as 0x00020603 when it cannot be read. ref: pcsx2/ps2/BiosTools.cpp:214-241, pcsx2/ps2/BiosTools.cpp:381-397, pcsx2/MemoryTypes.h:12-14, pcsx2/CDVD/CDVD.cpp:46-60, pcsx2/CDVD/CDVD.cpp:147-214

The network adapter opens eeprom.dat and flash.dat from the working directory, standing in a compiled-in image for the first and a card filled with 0xFF for the second. DEV9hdd.raw is the default name of the empty disk image the settings page writes, and memory cards, save states and screenshots are likewise produced by the emulator rather than read from a distribution. ref: pcsx2/DEV9/DEV9.cpp:109-160, pcsx2/DEV9/flash.cpp:8-16, pcsx2/DEV9/flash.cpp:62-86, pcsx2/DEV9/DEV9.h:31-33

An IRX named in the configuration is read into the ROM region at 0x3C0000 once the IOP reaches 0x1630. The field is empty by default and names no file of its own. ref: pcsx2/ps2/BiosTools.cpp:243-256, pcsx2/ps2/BiosTools.cpp:399-400, pcsx2/R3000AInterpreter.cpp:220

Everything under the resources folder is read at its own name from EmuFolders::Resources, and GetOverridableResourcePath lets a copy in UserResources take precedence. The standalone builds carry the folder with them, the Android application unpacks it from its assets and force-refreshes the shaders and the two game databases on update because a stale copy no longer matches the binary. The libretro core ships as a bare shared object and reads the same tree from /pcsx2/resources, with the BIOS folder at /pcsx2/bios, so a libretro user supplies both. ref: pcsx2/Pcsx2Config.cpp:2348-2357, pcsx2/Pcsx2Config.cpp:2507, pcsx2/Pcsx2Config.cpp:2584-2598, pcsx2-libretro/Main.cpp:157-158, pcsx2-libretro/Main.cpp:1000, platforms/android/app/src/main/java/kr/co/iefriends/pcsx2/MainActivity.java:60-61, platforms/android/app/src/main/java/kr/co/iefriends/pcsx2/MainActivity.java:355-372

Missing resources are not uniformly survivable. A font that cannot be read fails LoadFontData, which fails ImGuiManager::Initialize and tears the GS device down, whichever renderer is running. A shader source that cannot be read fails the pipeline compile and the device with it, but only for the backend that reads it, and the renderer setting picks among OpenGL, Vulkan and, on Windows, Direct3D 11 and 12. Vulkan is the only backend the Android, iOS and libretro builds have, so its sources are the ones no session can do without. The single caught failure is the Vulkan sharpening pipeline, which turns itself off. The databases, the patch archive, the controller mappings, the sounds and the interface artwork degrade instead. ref: pcsx2/ImGui/ImGuiManager.cpp:155-160, pcsx2/ImGui/ImGuiManager.cpp:501-575, pcsx2/GS/GS.cpp:88-110, pcsx2/GS/GS.cpp:160-179, pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:2593-2612

The Qt builds resolve a per-script interface font by filename, first under UserResources then under the resources folder, and download the first entry of the script table into UserResources/fonts when neither holds it. Only the Latin and emoji entries are shipped. ref: pcsx2-qt/Translations.cpp:312-370, pcsx2-qt/Translations.cpp:407-424, pcsx2-qt/Translations.cpp:541-549

75 files | 13 required, 62 optional | 72 in repo, 3 missing | 4 with HLE fallback

ps2-0230a-20080220.bin required in repo
PS2 BIOS image

ps2-0230a-20080220.rom1 optional in repo
DVD player ROM

ps2-0230a-20080220.rom2 optional missing
Chinese ROM extension

ps2-0230a-20080220.nvm optional in repo HLE fallback
Console NVRAM

  • Path: pcsx2/bios/ps2-0230a-20080220.nvm
  • Size: 1.0 KB
  • Source: pcsx2/CDVD/CDVD.cpp:46-47, pcsx2/CDVD/CDVD.cpp:147-200
  • Read at the BIOS path with the extension replaced by nvm. Carries the console id, the iLink id, the MAC, the model number and the OSD configuration. A 1024 byte image is built in memory when the file is absent, short, or carries a blank config block, zeroed except for a fixed iLink id and the language and region defaults of the BIOS region.

ps2-0230a-20080220.mec optional in repo HLE fallback
Mechacon version

  • Path: pcsx2/bios/ps2-0230a-20080220.mec
  • Size: 4 B
  • Source: pcsx2/CDVD/CDVD.cpp:60, pcsx2/CDVD/CDVD.cpp:201-214
  • Read at the BIOS path with the extension replaced by mec. Defaults to 0x00020603 and is written back at that path when it cannot be read.

eeprom.dat optional in repo HLE fallback
DEV9 EEPROM

flash.dat optional missing HLE fallback
DEV9 SmartMedia flash image

  • Size: max 8.2 MB
  • Source: pcsx2/DEV9/flash.cpp:8-16, pcsx2/DEV9/flash.cpp:62-86
  • Opened from the working directory at network adapter init and read as 1024 blocks of 16 pages of 512 bytes plus 16 ECC bytes. The card is filled with 0xFF when the file is absent, and a short read is logged.

<module>.irx optional missing
IOP module injected at boot

GameIndex.yaml optional in repo bundled
Game database

armsx2_overrides.yaml optional in repo bundled
Mobile GPU game database overlay

RedumpDatabase.yaml optional in repo bundled
Disc track hash database

patches.zip optional in repo bundled
Game patch archive

game_controller_db.txt optional in repo bundled
SDL controller mapping database

Roboto-Regular.ttf required in repo bundled
Interface font

RobotoMono-Medium.ttf required in repo bundled
Fixed-width interface font

fa-solid-900.ttf required in repo bundled
Font Awesome icon font

promptfont.otf required in repo bundled
Controller prompt font

Twemoji.Mozilla.ttf optional in repo bundled
Emoji font

NotoColorEmoji-Regular.ttf optional in repo bundled
Android emoji font

NotoSansJP-Regular.ttf optional in repo
Japanese interface font

NotoSansKR-Regular.ttf optional in repo
Korean interface font

NotoSansSC-Regular.ttf optional in repo
Simplified Chinese interface font

NotoSansTC-Regular.ttf optional in repo
Traditional Chinese interface font

NotoSansArabic-Regular.ttf optional in repo
Arabic interface font

NotoSansHebrew-Regular.ttf optional in repo
Hebrew interface font

NotoSansDevanagari-Regular.ttf optional in repo
Devanagari interface font

tfx.glsl required in repo bundled
Vulkan texture function shader

convert.glsl required in repo bundled
Vulkan conversion shader

present.glsl required in repo bundled
Vulkan presentation shader

merge.glsl required in repo bundled
Vulkan merge shader

interlace.glsl required in repo bundled
Vulkan interlace shader

shadeboost.glsl required in repo bundled
Vulkan shade boost shader

cas.glsl optional in repo bundled
Vulkan contrast adaptive sharpening shader

imgui.glsl required in repo bundled
Vulkan interface shader

fxaa.fx required in repo bundled
FXAA shader, shared by every backend

ffx_a.h optional in repo bundled
FidelityFX helper header

ffx_cas.h optional in repo bundled
FidelityFX CAS header

tfx_vgs.glsl optional in repo bundled
OpenGL texture function vertex and geometry shader

tfx_fs.glsl optional in repo bundled
OpenGL texture function fragment shader

convert.glsl optional in repo bundled
OpenGL conversion shader

present.glsl optional in repo bundled
OpenGL presentation shader

merge.glsl optional in repo bundled
OpenGL merge shader

interlace.glsl optional in repo bundled
OpenGL interlace shader

shadeboost.glsl optional in repo bundled
OpenGL shade boost shader

cas.glsl optional in repo bundled
OpenGL contrast adaptive sharpening shader

imgui.glsl optional in repo bundled
OpenGL interface shader

tfx.fx optional in repo bundled
Direct3D texture function shader

convert.fx optional in repo bundled
Direct3D conversion shader

present.fx optional in repo bundled
Direct3D presentation shader

merge.fx optional in repo bundled
Direct3D merge shader

interlace.fx optional in repo bundled
Direct3D interlace shader

shadeboost.fx optional in repo bundled
Direct3D shade boost shader

cas.hlsl optional in repo bundled
Direct3D contrast adaptive sharpening shader

imgui.fx optional in repo bundled
Direct3D interface shader

message.wav optional in repo bundled
Achievement notification sound

unlock.wav optional in repo bundled
Achievement unlock sound

lbsubmit.wav optional in repo bundled
Leaderboard submission sound

placeholder.png optional in repo bundled
Fullscreen interface placeholder texture

  • Path: pcsx2/resources/fullscreenui/placeholder.png
  • Source: pcsx2/ImGui/FullscreenUI.cpp:335
  • Named as the placeholder texture when the fullscreen interface initialises.

no-save.png optional in repo bundled
Empty save slot texture

media-cdrom.svg optional in repo bundled
Game list menu icon

start-game.svg optional in repo bundled
Start game menu icon

applications-system.svg optional in repo bundled
Settings menu icon

exit.svg optional in repo bundled
Exit menu icon

start-file.svg optional in repo bundled
Start file menu icon

drive-cdrom.svg optional in repo bundled
Start disc menu icon

start-bios.svg optional in repo bundled
Start BIOS menu icon

back-icon.svg optional in repo bundled
Back menu icon

desktop-mode.svg optional in repo bundled
Desktop mode menu icon

AppBanner.svg optional in repo bundled
Application banner

AppIconLarge.png optional in repo bundled
Application icon

AppIconLarge.ico optional in repo bundled
Windows application icon

  • Path: pcsx2/resources/icons/AppIconLarge.ico
  • Source: pcsx2-qt/QtUtils.cpp:755
  • Read next to the program when a shortcut is written.

ra-icon.svg optional in repo bundled
RetroAchievements icon

star-<rating>.svg optional in repo bundled
Compatibility rating icons

<region>.svg optional in repo bundled
Region flag icons

cover-placeholder.png optional in repo bundled
Game list cover placeholder

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