From e0b9f462ce1dc41dd363ab0afc1d15ea884c9e47 Mon Sep 17 00:00:00 2001 From: The412Banner Date: Wed, 23 Sep 2026 23:55:20 -0400 Subject: [PATCH 1/2] ARMSX2 (PS2 with ARM64 recompilers) in the front end, with Player 1 on the controller Upstream PCSX2 interprets the PS2's CPUs on ARM64 (pcsx2/arm64/RecStubs.cpp): NFS Underground 2 ran at 17 fps with one core at 100%. ARMSX2 is the PCSX2 fork with ARM64 recompilers. It is listed beside PCSX2 for the ps2 folder, installs from the desktop catalog (package armsx2), and bannerlator-pad-defaults gives it the PCSX2 profile under its own folder (ARMSX2/inis/PCSX2.ini). --- .../main/java/com/droiddeck/launcher/frontend/Library.kt | 6 ++++-- .../linuxfs/overlay/usr/local/bin/bannerlator-pad-defaults | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/droiddeck/launcher/frontend/Library.kt b/app/src/main/java/com/droiddeck/launcher/frontend/Library.kt index f6c1c712d..2e0865396 100644 --- a/app/src/main/java/com/droiddeck/launcher/frontend/Library.kt +++ b/app/src/main/java/com/droiddeck/launcher/frontend/Library.kt @@ -19,7 +19,7 @@ object Library { class Emulator(val id: String, val name: String, val system: String, val program: String, val installed: Boolean, val games: List) { /** The emulator's own icon, bundled (the runtime keeps them as theme SVGs the app cannot draw). */ val iconRes: Int get() = when (id) { - "rpcs3" -> R.drawable.emu_rpcs3; "pcsx2" -> R.drawable.emu_pcsx2; "dolphin" -> R.drawable.emu_dolphin + "rpcs3" -> R.drawable.emu_rpcs3; "pcsx2", "armsx2" -> R.drawable.emu_pcsx2; "dolphin" -> R.drawable.emu_dolphin "duckstation" -> R.drawable.emu_duckstation; "melonds" -> R.drawable.emu_melonds; "cemu" -> R.drawable.emu_cemu "ppsspp" -> R.drawable.emu_ppsspp; else -> R.drawable.emu_retroarch } @@ -62,6 +62,8 @@ object Library { private val specs = listOf( Spec("rpcs3", "RPCS3", "PS3", "/opt/appimages/rpcs3.AppImage", listOf("ps3"), setOf("iso")), Spec("pcsx2", "PCSX2", "PS2", "/opt/appimages/pcsx2.AppImage", listOf("ps2"), setOf("iso", "chd", "cso", "gz")), + // PCSX2 with ARM64 recompilers: upstream PCSX2 interprets the PS2's CPUs on ARM64. + Spec("armsx2", "ARMSX2", "PS2", "/opt/appimages/armsx2.AppImage", listOf("ps2"), setOf("iso", "chd", "cso", "gz")), Spec("dolphin", "Dolphin", "GameCube / Wii", "/opt/appimages/dolphin.AppImage", listOf("gc", "gamecube", "wii"), setOf("iso", "rvz", "gcz", "wbfs", "ciso")), Spec("duckstation", "DuckStation", "PS1", "/opt/appimages/duckstation.AppImage", listOf("ps1", "psx"), setOf("cue", "chd", "pbp", "iso", "bin", "img", "ecm", "m3u")), Spec("melonds", "melonDS", "DS", "/opt/appimages/melonds.AppImage", listOf("ds", "nds"), setOf("nds", "dsi")), @@ -70,7 +72,7 @@ object Library { Spec("retroarch", "RetroArch", "many systems", "/usr/bin/retroarch", emptyList(), emptySet()), ) private val installedIds = mapOf( - "rpcs3" to "rpcs3", "pcsx2" to "pcsx2", "dolphin" to "dolphin", "duckstation" to "duckstation", + "rpcs3" to "rpcs3", "pcsx2" to "pcsx2", "armsx2" to "armsx2", "dolphin" to "dolphin", "duckstation" to "duckstation", "melonds" to "melonds", "cemu" to "cemu", "ppsspp" to "emulators", "retroarch" to "emulators", ) diff --git a/tools/linuxfs/overlay/usr/local/bin/bannerlator-pad-defaults b/tools/linuxfs/overlay/usr/local/bin/bannerlator-pad-defaults index 9d410e4e5..01b9f593f 100755 --- a/tools/linuxfs/overlay/usr/local/bin/bannerlator-pad-defaults +++ b/tools/linuxfs/overlay/usr/local/bin/bannerlator-pad-defaults @@ -221,6 +221,10 @@ SmallMotor = SDL-0/SmallMotor def pcsx2(): patch_ini_section(os.path.join(CONFIG, "PCSX2/inis/PCSX2.ini"), "Pad1", PCSX2_PAD1, "PCSX2", require="SettingsVersion") + # ARMSX2 (PCSX2 with ARM64 recompilers): the same ini and binding names under its own folder + # (pcsx2/Pcsx2Config.cpp: $XDG_CONFIG_HOME/ARMSX2/inis/PCSX2.ini). + patch_ini_section(os.path.join(CONFIG, "ARMSX2/inis/PCSX2.ini"), "Pad1", PCSX2_PAD1, "ARMSX2", + require="SettingsVersion") # Dolphin: SDL//; control names from InputCommon/.../SDL/SDLGamepad.h (Left Y+ From 1a3b16f61416a7809581c9f2733682f656eec6b7 Mon Sep 17 00:00:00 2001 From: The412Banner Date: Wed, 23 Sep 2026 23:59:25 -0400 Subject: [PATCH 2/2] PS2 is ARMSX2 only: PCSX2 leaves the front end On device NFS Underground 2 ran at 17 fps in PCSX2 (one core at 100%, the PS2's CPUs interpreted) and 59.9 fps at 100% speed in ARMSX2 (EE thread ~15%, all recompilers and fastmem on under proot). Existing PCSX2 configs are left alone; bannerlator-pad-defaults still covers them. --- .../main/java/com/droiddeck/launcher/frontend/Library.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/droiddeck/launcher/frontend/Library.kt b/app/src/main/java/com/droiddeck/launcher/frontend/Library.kt index 2e0865396..c56971aae 100644 --- a/app/src/main/java/com/droiddeck/launcher/frontend/Library.kt +++ b/app/src/main/java/com/droiddeck/launcher/frontend/Library.kt @@ -19,7 +19,7 @@ object Library { class Emulator(val id: String, val name: String, val system: String, val program: String, val installed: Boolean, val games: List) { /** The emulator's own icon, bundled (the runtime keeps them as theme SVGs the app cannot draw). */ val iconRes: Int get() = when (id) { - "rpcs3" -> R.drawable.emu_rpcs3; "pcsx2", "armsx2" -> R.drawable.emu_pcsx2; "dolphin" -> R.drawable.emu_dolphin + "rpcs3" -> R.drawable.emu_rpcs3; "armsx2" -> R.drawable.emu_pcsx2; "dolphin" -> R.drawable.emu_dolphin "duckstation" -> R.drawable.emu_duckstation; "melonds" -> R.drawable.emu_melonds; "cemu" -> R.drawable.emu_cemu "ppsspp" -> R.drawable.emu_ppsspp; else -> R.drawable.emu_retroarch } @@ -61,8 +61,8 @@ object Library { private class Spec(val id: String, val name: String, val system: String, val program: String, val folders: List, val exts: Set) private val specs = listOf( Spec("rpcs3", "RPCS3", "PS3", "/opt/appimages/rpcs3.AppImage", listOf("ps3"), setOf("iso")), - Spec("pcsx2", "PCSX2", "PS2", "/opt/appimages/pcsx2.AppImage", listOf("ps2"), setOf("iso", "chd", "cso", "gz")), - // PCSX2 with ARM64 recompilers: upstream PCSX2 interprets the PS2's CPUs on ARM64. + // PS2: ARMSX2, the PCSX2 fork with ARM64 recompilers. Upstream PCSX2 interprets the PS2's + // CPUs on ARM64 (NFS Underground 2: 17 fps against ARMSX2's full 60), so it is not offered. Spec("armsx2", "ARMSX2", "PS2", "/opt/appimages/armsx2.AppImage", listOf("ps2"), setOf("iso", "chd", "cso", "gz")), Spec("dolphin", "Dolphin", "GameCube / Wii", "/opt/appimages/dolphin.AppImage", listOf("gc", "gamecube", "wii"), setOf("iso", "rvz", "gcz", "wbfs", "ciso")), Spec("duckstation", "DuckStation", "PS1", "/opt/appimages/duckstation.AppImage", listOf("ps1", "psx"), setOf("cue", "chd", "pbp", "iso", "bin", "img", "ecm", "m3u")), @@ -72,7 +72,7 @@ object Library { Spec("retroarch", "RetroArch", "many systems", "/usr/bin/retroarch", emptyList(), emptySet()), ) private val installedIds = mapOf( - "rpcs3" to "rpcs3", "pcsx2" to "pcsx2", "armsx2" to "armsx2", "dolphin" to "dolphin", "duckstation" to "duckstation", + "rpcs3" to "rpcs3", "armsx2" to "armsx2", "dolphin" to "dolphin", "duckstation" to "duckstation", "melonds" to "melonds", "cemu" to "cemu", "ppsspp" to "emulators", "retroarch" to "emulators", )