mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-09-19 19:07:48 +02:00
6.60 ships byte-identical paf.prx and vshmain.prx to 6.61 - all 6338 + 669 functions disassemble the same - and boots to an interactive XMB, so let FirmwareVersionSupportsVSH accept it. That matters because no UMD carries 6.61 (it was download-only), so 6.60 is the best a disc-installed firmware can be. The two module patches were hardcoded offsets from the module base applied to any module of the right name, which is quietly wrong on any other build: - The scePaf heap arena slot moves with every build (0x18CCD8 on 6.00 through 0x18D728 on 6.60/6.61) but sits at gp - 0x7E88 in all of them, so find it that way. On its own this turns an immediate SIGSEGV inside scePaf into a clean stall on 6.00 through 6.39 - they still don't reach an XMB, they get stuck in sceVshBridge_Driver instead. - The vsh_module alarm-category offset has no such anchor, so check the word there is the one the patch was derived from. On 6.20 and 6.00 it's ASCII string data - the unconditional write was corrupting a string table. Also resolve the per-model kernel drivers (memlmd, loadexec, wlanfirm) to the model being emulated. They were asked for as _01g, which a firmware unpacked for a single model doesn't have - and our own updater unpack defaults to 02g. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>