Four console runs, each changing exactly one thing, with a marker in the entry point so the trace says which variant ran: -f -c cfg --verbose --menu config read SIGSEGV, rip=0 -f -c cfg --menu config read SIGSEGV, rip=0 -c cfg --menu config read SIGSEGV, rip=0 -f --verbose --menu no config runs, menu on screen So it is not --verbose taking effect for the first time, and not video_fullscreen either: dropping each leaves the crash. It is the config file being read at all. The config itself parses: marking config_load before and after prints both probes, so defaults, parse and config_load_file all return. The crash is after the read and before the first frame - no ps5_frame 0 line, and neither runloop_iterate call site in rarch_main is reached. It is inside retroarch_main_init, in the stretch between the config load and the first frame. drivers_init and video_driver_init_internal both complete (overlay, context reset, display server, mouse cursor, audio init, core info all mark), and ps5_input_init is never entered, so the input driver is not involved. What remains in that stretch is the driver lookups - audio, video, input, camera, menu - each indexing a driver table this build has stripped to almost nothing, and that is where the next marker goes. The title is back in its working state: entry argv complete, the config-path patch parked in parked/config-path.patch.py, input_driver left at "null" so the menu shows. gates: bash tools/verify.sh -> PASS. reproduce: bash tools/run-title.sh --watch 10.
PS5 RetroArch
A native RetroArch homebrew application for jailbroken PlayStation 5 consoles. RetroArch is the reference frontend for the libretro API; this project brings it to a console that was never meant to run it, so the emulators and games that already exist as libretro cores can run there too.
Status: project definition. The gates, the milestone map, the invariants and
the step ladder are written and committed; no code has been built or run on a
console yet. What is true right now is in docs/ACTIVE.md, and
the evidence behind each claim is in docs/PHASE_LOG.md.
How it fits together
Everything about this console's platform layer already has an owner. This repository supplies the RetroArch side of it and consumes the rest:
| Project | What it provides | How this project uses it |
|---|---|---|
ps5-payload-sdk |
the PS5 compiler, sysroot, and the console's public APIs (ScePad, SceAudioOut, SceVideoOut, SceUserService, networking) |
$PS5_PAYLOAD_SDK/toolchain/prospero.sh supplies the toolchain for every PS5 compile |
../ps5-opengl-sdk-0.2.0 |
a relocatable OpenGL 3.3 Core stack with a hardware acceptance run | the OpenGL backend, for a menu or a core that needs one |
../PS5_Vulkan |
the Vulkan driver being built for this console, with vendored Vulkan headers | the backend the XMB menu needs once the driver reaches rung 1.0; RGUI needs no GPU at all |
RetroArch itself is upstream, unmodified on disk and patched by a committed
series: the pinned release tarball is fetched into vendor/, which is never
committed and never edited by hand. Every change to it is a file in patches/.
What this repository owns: the RetroArch platform layer — a context driver that takes a display and a graphics context, a platform driver that owns the title's lifetime, a pad driver and an audio driver — plus the build, the staging, the console deployment and the evidence pipeline that prove a step.
Build
Requirements: Linux with clang, clang-format, clang-tidy, make,
python3, curl, tar and pkg-config, plus the PS5 payload SDK unpacked
somewhere and pointed at with PS5_PAYLOAD_SDK (default
~/ps5-payload-sdk).
export PS5_PAYLOAD_SDK=~/ps5-payload-sdk
tools/verify.sh # format, unit, build, integration, evidence
tools/verify.sh is the only entry point a step needs: it runs the five gates
in order and stops at the first failure. tools/verify.sh --list prints what
each gate runs, and docs/TESTING.md says what each one means.
Install on a console
The application ships as a homebrew title folder, not a retail package:
dist/<TITLE_ID>/
├── eboot.bin the signed application image the console runs
├── retroarch.cfg the configuration seed
└── sce_sys/ param.json, icon0.png
Copy that folder to homebrew/ on the console's internal storage or a USB
drive, so it ends up beside the other homebrew titles, and start it from the
console's own homebrew launcher. This project does not configure a console, does
not install a loader and does not register titles — see
docs/DEPLOYMENT.md.
Documentation
The documentation is the project's memory, and it is layered so that an agent session pays only for what it reads:
| File | Role |
|---|---|
AGENTS.md |
frozen rules: read order, volatility, work loop, gates, evidence |
docs/PLAN.md |
the gates, the milestone map, the invariants |
docs/ACTIVE.md |
what is happening now, what is next, what was last verified |
docs/REFERENCE.md |
the step ladder, the environment, the pins, the graphics contract |
docs/TESTING.md |
what the gates mean and what counts as evidence |
docs/DEPLOYMENT.md |
staging, upload, observing a run, rollback |
docs/TROUBLESHOOTING.md |
symptom → cause → fix, and known-benign messages |
docs/FINDINGS.md |
append-only measurements and what they force |
docs/PHASE_LOG.md |
append-only, dated entry per landed step |
Licence
RetroArch is GPL-3.0-or-later, and so is this port; the upstream licence travels
with the sources that get fetched into vendor/. Files in this repository carry
their own copyright and SPDX headers.