PoorDS4 RC38 fixes controller routing in games that preallocate more than one disconnected pad slot and adds an exact firmware 8.60 compatibility manifest.
What changed
- Match the destination by the DS4's unique
(user ID, pad index)before using the existing global fallback. This fixes Pragmata while preserving correct P1/P2 routing when a DualSense is also connected. - Reject duplicate controller identities and require the source identity for a sole connected fallback instead of guessing.
- Add the exact 8.60 (
0x08600004) six-export manifest recovered from the supplied firmware report. All structural and fail-closed checks still run before any game import is changed. - Extend compatibility reports to schema 5 with per-entry user IDs and source-identity counts.
- Make release builds reproducible and strip workstation paths from public assets.
Verification
- On firmware 11.60, one RC38 session followed Pragmata, JoJo, and FC26 without reinjection. Pragmata accepted input, JoJo entered a battle, and FC26 reached gameplay.
- The exact stripped release ELF was installed again into a live game and produced translated frames and button changes with zero read, write, lease, contention, or bridge-health failures.
- All targets compile warning-free with ps5-payload-sdk v0.42 and pass PS5-target static analysis, focused-tree safety assertions, ELF ABI checks, and SDK dependency checks.
- Two independent clean release builds produced byte-identical assets and the checksums in
SHA256SUMS.txt.
Firmware status
- 11.60: RC38 live-tested across Pragmata, JoJo battle, and FC26 gameplay.
- 8.60: exact manifest added from the supplied source report; RC38 controller testing on 8.60 is still required.
- 12.40: exact manifest retained from supplied reports; RC38 hardware testing is still required.
- Other firmware: eligible only after every bounded structural runtime check passes; untested versions are not guaranteed.
Download PoorDS4rc38.elf for normal automatic use. PoorDS4-status.elf is read-only. Use PoorDS4-stop.elf for cooperative cleanup or before replacing a running build. PoorDS4 exits for rest mode safety and must be reinjected after wake.