The Windows TLS rewriter only patches FS-relative instructions that CodeInstructionCollector decodes. Code that no symbol, unwind range or root reaches is covered by a linear sweep that starts after int3 padding and stops at the first instruction beginning with two zero bytes, so zero-filled bytes are not read as code. The .NET NativeAOT homebrew titles pad between functions with zero bytes instead of int3 and have unwind entries for only part of their code. In Prospero Vibrate (PPSA99920) the sweep ended at the padding after the first function. Functions reached only through switch jump tables, which the control-flow graph does not follow, or through pointers it cannot resolve kept 105 of 670 FS loads unpatched: 84 `mov reg, fs:[0x28]` stack-guard reads (65 into rax, 19 into rcx) and 21 `mov rax, fs:[0]` thread-pointer reads. The title faulted reading address 0x28 within a second of start. The sweep now treats a zero run that follows a jump, call, return or trap and ends at the next 16-byte boundary as alignment padding, and continues at that boundary. A call counts because a function can end in a call to a noreturn function. Zero fill after straight-line code, or a whole zero 16-byte block, still ends the sweep as before. All 670 FS loads in PPSA99920 are now patched, as are the 102 of 685 in Prospero Explorer (PPSA99109) and the 103 of 718 in Prospero Multi Tools (PPSA99110). New tls_function_coverage padding cases: loads behind zero padding after a return, a call and a jump, with 13, 2, 1 and 5 zero bytes, are patched; a load behind zero fill after a nop is left unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 0306c677784b6c4272990ce65f6daf9fb2dbc3ca)
About
Tool for automatic executables porting to Linux and Windows.
Includes a relinker that converts executable to the target system's native format and implementations of system prx libraries suitable for dynamic linking. No emulation or separate runtime process.
Usage, Build instructions, Architecture, Technical debt of the project, code style conventions, contributing
Status
* System libraries: percentage of the functions known to the project so far (declared in core/libs/prx), not of every PS5 system function. The total grows as more functions are declared.
Dreaming Sarah (2D platformer) runs at a stable 60 fps on a GTX 1050 Ti / i5-7500 3.4GHz.
Unsupported or unexpected states strictly throw std::runtime_error. what() is printed to stderr and the process terminates.
The shader recompiler successfully produces SPIR-V (validated via Spirv-Tools when built with ANYPS5_ENABLE_SPIRV_TOOLS).
Compatibility
See the game compatibility list for tested games and known issues.
Input mapping
SDL-mapped game controllers are supported, including analog sticks and triggers. Keyboard and mouse controls can be configured with an anyps5-input.ini file. See input mapping for the supported devices and configuration format.
Disclaimer
This project is intended for interoperability, research, preservation, and compatibility purposes. It does not include, distribute, or require copyrighted software, firmware, cryptographic keys, or proprietary libraries. Users are responsible for ensuring that any binaries used with this project are obtained and used in accordance with applicable laws and their respective license terms.
License
This project is licensed under the GNU General Public License version 2 only.