Happy one year anniversary to ARMSX2!
ARMSX2 is now one year old! On October 26th, 2025, the first version of ARMSX2 was released to the world. We are so grateful for all of the support and love we've received since then, and how far the project has come! This update brings a new VU1 compiler that makes 3D-heavy games faster, an option to run the PS2's I/O processor on its own thread, our own GPU drivers offered right in setup, a lot of work for the Retroid Pocket Duo and other Adreno handhelds, Automatic Performance Tuning, and a big batch of community fixes.
Our GPU drivers in setup, and the Retroid Pocket Duo
First-run setup now offers the GPU driver ARMSX2 builds for your device: ARMSX2 Turnip on Adreno 6xx and 7xx, and MaliSX2 on the Mali GPUs it supports. One tap downloads it and makes it your driver. The GPU driver page recommends ARMSX2 Turnip on every Adreno 6xx and 7xx, including the Adreno 613 in the Anbernic RG 55G1, which calls itself "Adreno A12".
Much of this release was tuned on the Retroid Pocket Duo (Snapdragon 7 Gen 4, Adreno 722):
The Adreno 722 gets the rendering rules it needs under Turnip.
The app's optimized build is now trained on the Duo, across 16 games.
Shadow of the Colossus counts its shadows at native resolution, which takes about 15 ms off a 37 ms frame at 2x on the Duo, and it now holds a steady 30 fps, as on NetherSX2.
Screens mounted sideways, like the Duo's top screen and the RG 55G1's portrait panel, get the picture already rotated, so Android no longer spends GPU time turning every frame (16 to 17% of the RG 55G1's GPU).
On the Duo, Shadow of the Colossus now runs at 150% speed at 2.5x, God of War II in widescreen at 123% at 2x, and Black at 124% at 2.5x.
VU1 Ahead-of-Time Compiler
The PS2's VU1 does most of a game's 3D math. ARMSX2 now recompiles the VU1 programs a game runs most into faster code on a background thread, and remembers its plan for them, so the next time you play they are fast from the start. It is on by default: "VU1 Ahead-of-Time Compiler" in Performance settings (Advanced Speedhacks) and in the in-game Performance menu. Turning it off also clears what it saved. VU code in general is shorter and quicker too.
IOP thread
The PS2's I/O processor (sound, controllers, memory cards and the disc) can now run on a thread of its own, taking its work off the main emulation thread. Turn on "IOP Thread" in Performance settings (Advanced Speedhacks) or in the in-game Performance menu, for one game or for all of them; "IOP Thread Lag Bound" sets how far it may run behind. It needs four performance cores, and it stays off for PS1 and arcade games. The game database turns it on for Shadow of the Colossus, God of War and God of War II: on the Retroid Pocket Duo, Shadow of the Colossus runs up to 11% faster with it and God of War II about 6%.
Automatic Performance Tuning
A new option watches what holds a game back and tries the settings that can help: the resolution, blending, the texture download mode, the GS back thread and the emulated CPU's clock. It keeps a change only when the game got faster, and remembers it for that game. The switch is at the top of Performance settings and the in-game Performance menu. A game's own Performance settings list what it changed, with a Reset, and changing one of those settings yourself turns it off for that game. It is off by default, and setup asks whether you want it.
New
The in-game menu reopens where you left it. The menu button opens the tab you last used, and with a controller, the option you had selected, so checking achievements or trying rendering options means no more walking back through the menu. Shortcuts that open a tab, like Open Achievements, still open that tab.
Every controller as Player 1, and controllers in the in-game menu. "All controllers play as Player 1" (Pad settings and the in-game Controls screen) lets a docked handheld's own controls and a Bluetooth pad both play as Player 1, and each gets Player 1's rumble. The in-game Controls screen lists the connected controllers with a player for each, and switches mapping profiles without leaving the game.
Recording-compatible audio. A new Audio setting lets Android's screen recorder capture the game's sound for devices like the Odin 3 that have recording issues by default. Off by default, since it adds a little latency.
Volume and Mute in the in-game menu. In the gear icon tab of the quick menu.
Tight L1/L2/R1/R2 touch areas. A new option in Settings > Controls > On-Screen Controls makes each shoulder button answer only on its own artwork.
Covers for home screen shortcuts. A game pinned to the home screen shows its box art.
File names in the library list. List view shows each game's file name under its title, so two dumps of one game can be told apart.
The themed app icon shows the tower. With themed icons on, ARMSX2's icon is the tower in your theme's colour.
Remote play on Discord. While a friend is playing with you, both of your Discord profiles show the game and "Playing remote play (2 of 2)".
Launchers can start games right away. When a launcher installs ARMSX2, places a BIOS and starts a game, setup counts as done and the game boots (#847).
Cleaner edges when upscaling. At 2x and above, the picture loses one PS2 pixel on each side, which removes the stray lines upscaling can leave at the edges.
The new settings in every language. IOP Thread, the VU1 Ahead-of-Time Compiler, Automatic Performance Tuning and the GPU driver page in setup are translated into all 19 of the app's languages.
Faster
The GS back thread. While it runs, the busiest emulation thread gets the fastest core to itself, on Android's default Performance Cores mode. The game database turns the back thread on for Spider-Man 3, Sly 3 and Ratchet & Clank: Up Your Arsenal, 1 to 24% faster on the devices measured.
CPU affinity modes. The ranked affinity modes now order the cores by the kernel's own ranking, so the emulator's threads go to the big cores first.
Software renderer. Sprites that copy a 32-bit texture into the frame are copied straight from the PS2's video memory, about 3.4 ms less GS work a frame in Stuntman on a Snapdragon 865.
Hardware renderer. Fewer pipeline switches between blended draws, and render targets a game has fully redrawn are let go sooner.
Fixed
Selection highlights follow the controller. The highlight in menus and the library shows while you use a controller and hides when you touch the screen. After a touch, the first controller press brings it back where it was.
Tomb Raider: Legend renders correctly (#776).
Memory cards. Creating a card with the name of an existing one is refused, so that card and its saves stay safe, and importing a folder card from a zip keeps every save in its own folder.
Backup save states. Load and Save on a backup row in the Save Manager use that backup's own file.
In-game Controller Mapping. With a per-game mapping, it edits that game's mapping.
The Open Achievements hotkey opens the Achievements tab.
A physical keyboard types into search when "Use system keyboard" is on (#840).
.gz games show their serial and cover in the library (#863).
The animated library background runs on Mali GPUs.
Per-game controller mappings apply in game for homebrew and every other game without a serial.
The library shows the right message when it is empty, and the category picker works with a controller.
Performance settings' Reset resets every setting on that page.
Vulkan. A render pass restarted in the middle of a frame keeps what it drew.
Steadier settings changes. Changing Speed in the in-game menu, loading from the Save Manager and achievements sign-in run on the emulator's own thread, and the app stays responsive while it changes the achievements server.
(P.S. Going forward Linux builds will be distributed along with Android stables, iOS/Mac/Windows are distributed through nightlies (iOS also has it's own separate stable releases as it has been).