Repository navigation
Running ps5-payload-dev SDK homebrew (websrv: Quake, Mari0): proposal, with a working Quake prototype #6712
Replies: 2 comments
|
A data point for choosing between the approaches: ps5-payload-dev SDK homebrew packaged as an app already takes AnyPS5's normal path. On 2026-10-09 I built EVO-PLAYER (PPSA99039, sainsaji/EVO-PLAYER-PS5 v0.11.0) from source with SDK v0.42. Its So for titles whose sources are available, packaging them as an app sidesteps most of the "what the prototype still patched" list. Payload-only builds such as websrv still need the generic support you propose. I haven't tried Quake or Mari0 either way. AI-assisted: yes (Claude Code) |
|
Thanks, that's a useful split. Where the source is available, packaging as an app avoids the payload path entirely. The Quake build here is only released as a websrv payload ( |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Summary
Homebrew built with the ps5-payload-dev SDK for the websrv launcher (Quake #6698, Mari0 #6239) can't run on AnyPS5 today. I got Quake to its main menu on Windows, with the attract demo running at about 25 FPS in software OpenGL. That run used three open PRs, one ready branch and some local binary patches. This thread proposes how to turn the patches into generic support, and asks which approach the maintainers want before I write it.
What already exists as PRs
unresolved ELF import(plain names,.sprxdependencies).sostop the title on Windowsqsort_smissingapplication heap: process metadata is missing(noPT_SCE_PROCPARAM)fix/libc-heap-without-process-parameters, not opened yet: the relinker records "no parameters" and the heap uses its default allocatorWhat the prototype still patched by hand
These apps don't start like a PS5 executable. The SDK's
_start→__crt_startexpects the launcher'spayload_args_t:sys_dynlib_dlsym, kernel r/w pipes andkdata_base. It sets up kernel access, patches the kernel and runs the SDK's own runtime linker (__rtld_*), which loads.sprxand.sofiles itself. AnyPS5 can't provide kernel access, but AnyPS5 has already loaded and bound everything by the time the entry point runs. So the prototype skipped that part:_startwas replaced by a call tomain(argc, argv, envp). Quake's.init_arrayis empty, so no constructor was lost. In general,DT_INITandDT_INIT_ARRAYwould have to run first, as the SDK's__rtld_lib_initdoes.param.json.AppMetadatathrowsparam.json not found. The prototype used a minimal one.libOSMesa.so.8with the SDK's__dlopenand__dlsym, which are linked intoquake.elf. OSMesa's own weak__dlopen,__dlsym,__dladdr,__dlcloseand__dlerrorimports expect them too. The prototype made them jump to AnyPS5'sdlopen,dlsymanddlerror.dlopen("libOSMesa.so.8")resolves against the working directory, and a second copy of a guest module has unbound imports. The prototype made the path reach the instance that was already loaded.mmapandmprotectare rawsyscallsequences.--trap-sdk-syscall-stubsturns them intoUD2. The prototype redirected them to AnyPS5'smmapandmprotect.Questions
ET_DYN(not0xfe10), noPT_SCE_PROCPARAM, and the SDK'spayload_get_args,__crt_startand__rtld_*symbols. Is keying on SDK symbol names acceptable, given that they're only in.symtaband a stripped payload loses them? Or should it be an explicit option such as--payload-entry?mainafter running their initializers, and bind the SDK's__dl*functions to libkernel'sdlopenfamily? Or would you rather emulatepayload_args_twith a workingsys_dynlib_dlsymand leave the kernel parts failing?dlopenof a bare name (or of an already-loaded bundled module's soname) return that module, as the SDK's rtld does withLD_LIBRARY_PATH(whichhomebrew.jssets to the app folder)?mmap477,mprotect74), or is that out of scope?If the direction is agreed, I'd send each step as its own PR with tests, keeping Quake (#6698) as the evidence.
Setup
Windows 11 Pro (26300), RTX 3060, WinLibs GCC 15.2.0 r7, Release,
main5d9dcc42d+ #6697 + #6702 + #6707 + the heap branch.q1.7zSHA-2569692254071d5a90b5f4d7fb316960ae1f4e586f944eb1d4641a79a914fd834fb.AI-assisted.
All reactions