One of Android’s most promising PS3 emulators just got better

PlayStation 3 emulation on Android is still a demanding job, and ARMSX3 has been steadily working through the problems that appear when software built around desktop processors has to run on ARM-based phones and tablets. Version 0.9 tackles several of those problems directly, with changes aimed at CPU accuracy, game compatibility, controller support and Android input handling. The biggest work happened under the hood. ARMSX3 is based on RPCS3, which has spent years being developed mainly around x86 desktop processors. Android devices usually run ARM64 chips, and the two architectures don't always handle calculations in exactly the same way. Those tiny differences can matter a lot when you're emulating hardware as complicated as the PlayStation 3.

PlayStation 3 emulation on Android is still a demanding job, and ARMSX3 has been steadily working through the problems that appear when software built around desktop processors has to run on ARM-based phones and tablets. Version 0.9 tackles several of those problems directly, with changes aimed at CPU accuracy, game compatibility, controller support and Android input handling. The biggest work happened under the hood. ARMSX3 is based on RPCS3, which has spent years being developed mainly around x86 desktop processors. Android devices usually run ARM64 chips, and the two architectures don’t always handle calculations in exactly the same way. Those tiny differences can matter a lot when you’re emulating hardware as complicated as the PlayStation 3.

ARM64 calculations now match the desktop implementation

The developers found 984 cases where ARM64 produced a different result from the x86 version when handling certain SPU floating-point operations. That’s a significant number. After the changes in ARMSX3 0.9, those differences have been reduced to zero when compared with the current x86 implementation. Around 500 of the mismatches came from ARM64-specific problems that needed fixing. The remaining 484 came from differences in how the x86 implementation itself behaved.

That doesn’t suddenly make every calculation identical to a real PlayStation 3. It means ARM64 is no longer introducing extra differences on top of the behaviour already present in the desktop emulator. For users, the practical result should be fewer strange crashes and fewer cases where a game behaves differently simply because it’s running on an ARM device.

Borderlands 2 helped expose two major bugs

Borderlands 2 was one of the games affected by these ARM64 problems. Previously, the game could stop shortly after the opening logo. With ARMSX3 0.9, it can now boot further, reach the title screen and render graphics correctly. Two separate bugs were responsible.

The first involved an ARM64 compilation problem with an SPU byte-shuffle instruction. Borderlands 2 uses that kind of operation heavily in some of its SPURS code. When the instruction was compiled incorrectly, the affected section could become stuck instead of finishing normally.

That’s the sort of bug that can be difficult to track down because it doesn’t always trigger an obvious crash. Bad data can simply continue moving through the program. Depending on the game, that could show up as broken graphics, audio problems, freezes or incorrect game logic. The second issue involved memory allocated to compiled SPU functions.

ARMSX3 had been providing an 8 KB scratch area. Some larger functions needed more. The allocation has now been increased to 256 KB, which should stop Android from killing the emulator when those functions run out of available stack space.

Other games benefit from the same fixes

Borderlands 2 isn’t the only title affected. BLEACH: Soul Resurrección can now enter Story Mode where it previously crashed. Spider-Man: Edge of Time has also seen fixes for random crashes.

What’s interesting here is that these weren’t individual patches created specifically for each game. The developers corrected problems in the ARM64 implementation itself. That’s a better result from a technical point of view. Fix the underlying issue once, and any other game using the same code path can benefit too. Version 0.9 also adjusts float-to-integer conversion behaviour and makes changes to thread stack handling on Android.

Bluetooth controller support gets cleaned up

Controllers received plenty of attention as well. Earlier versions could store mappings for Bluetooth controllers assigned to player slots two through seven, but the emulator didn’t always make those controllers available correctly. ARMSX3 0.9 fixes that.

Short button presses have also been improved. Previously, a very quick press and release could happen entirely between two controller polling cycles. When that happened, the emulator might never see the input at all.

Now, presses and releases can be queued separately, reducing the chance of missing quick inputs. L2 and R2 handling has been corrected for controllers that report their triggers as analogue axes instead of normal buttons. Gyroscope handling has also been updated. There’s USB keyboard support too. Games can call Android’s software keyboard when necessary, while physical USB keyboards can also work through the emulated PS3 interface.

Version 0.9.1 fixes a controller side effect

The new update followed with a few additional changes. One problem came from enabling all seven PlayStation 3 controller ports at startup. Some games could interpret that as seven controllers being connected at once.

The update changes the behaviour. Controller ports two through seven now remain empty until ARMSX3 actually receives input from another controller. Save-data handling has also been improved. Users can import PS3 saves from ZIP archives or folders directly through the app, which avoids some of Android’s restrictions around writing files into private application storage.

The update also adds console-level settings for language, region, keyboard layout, date and time formats and the preferred confirmation button. ARMSX3 0.9 isn’t about adding one headline feature. It’s mostly about fixing the technical differences that appear when PS3 emulation moves from x86 PCs to ARM64 Android hardware.

Those changes are already helping games boot further, reducing crashes and making controllers behave more predictably. For an emulator dealing with a system as complicated as the PlayStation 3, that’s the kind of progress that matters most.

Spread the love
error: