The param.sfo revert shipped as a 'fix' but online verification shows
Apollo Save Tool's current main (v02.32) still ships ATTRIBUTE=32 /
CATEGORY=gde / --authinfo and is a proven universal PS4 app. So 0/gd
is probably innocent too and the real cause is still unidentified.
This commit stops overclaiming: PKG_ATTR, PKG_CATEGORY and AUTHINFO
are now make variables so either build is one flag away, the Makefile
comment records both the evidence and the counter-evidence, and the
stale 'param.sfo is the cause' claim is corrected.
Also deletes installer/font.h and scripts/genfont.py (2366 dead lines
left over from the reverted SDL reskin) and fixes a wrong deployment
path in build.sh: orbisRPC goes to /data/payloads/ for Payload Guest.
GoldHEN's own single payload slot is /data/payload.bin, a different
thing entirely.
param.sfo ATTRIBUTE 32->0 and CATEGORY gde->gd, and drop --authinfo.
These are the only values verified to launch on real hardware. The
gde/32 + authinfo combo was theory borrowed from Apollo; every build
carrying it died silently pre-logging on a real console (4/4) while
0/gd launched fine. Isolation ruled out authinfo (2 builds), the SDL
UI, and the native UI; LIBS, the object set, and all installer.c
deltas are identical or provably safe before the first log call.
param.sfo was the last variable present in 4/4 crashes and absent
from the single success.
installer.c also gains a pre-main constructor that writes a BOOT line
via raw open/write. Four builds died with install.log completely
untouched and the in-main crash handler never armed, so loader-side
death and main-side death were indistinguishable. Now: no BOOT means
the SELF never got control; BOOT without a stage means main died
before the first log.
These libs are linked but never referenced anywhere in daemon source.
If the modules don't exist on the target firmware, the ELF fails to
load entirely (no log.txt created) — the reported crash on 9.00/12.50/13.52.
Also scrub the live Discord token leaked into installer config files
and hardcoded fallbacks in installer.c (all now SET_ME).
Closes#2, #7. Fixes packaging mismatch #8 (CATEGORY/ATTRIBUTE/
--authinfo tracked separately).
Co-authored-by: SirHumza <sirhumza>
- kill() returns EPERM in sandbox, so replaced with sceKernelLoadStartModule
to launch evict.elf as a module — it reads daemon.lock and kills the daemon
- Copy evict.elf first, then load+start it via LoadStartModule
- Wait 500ms for evict.elf to run, then continue to copy orbisrpc.bin
- Removed dead kill() SIGTERM/SIGKILL code
- Verified: no kill references in binary, all tests pass, EBOOT matches
- Removed all 'orbisRPC Setup' / 'Setup' branding from dialogs
- Welcome: just 'orbisRPC\n\nInstall daemon payload.'
- Status dialog: just 'status:' with daemon/evict/lock/token lines
- Done dialog: just 'Done.\n\nPayloads in /data/payloads...'
- Removed duplicate ui_ok(report) bug
- Cleaned up step_status (was broken by earlier edit)
- Removed 'Setup PKG' reference from missing-payload message
Verified: no 'Setup' in binary, EBOOT matches, tests green
- PAYLOAD_BIN and EVICT_BIN both go to /data/payloads/ (Payload Guest)
- Removed all /data/GoldHEN/bin/elf/ references from code + docs
- Installer auto-evicts old daemon via SIGTERM/SIGKILL from daemon.lock
- Copies evict.elf + orbisrpc.bin to /data/payloads/
- Pre-saves config.json with Discord token
- Splash hidden before ui_init() for zero delay
Verified: EBOOT matches, SHA-256 match, tests green
- Installer sends SIGTERM then SIGKILL to daemon PID from
daemon.lock before copying new payload (no user needs to
manually launch evict.elf)
- Copy evict.elf to payload folder for future manual use
- Pre-save config.json with Discord token so step_token() skips entry
- Fix fallback config template to use real token (was SET_ME)
- Move sceSystemServiceHideSplashScreen() to top of main() for
zero visible delay between splash hide and first dialog
- Update INSTALLER.md to reflect evict flow, no-sleep fact
Verified: PKG has all 3 assets, EBOOT matches, SHA-256 match, tests green
- Restore evict.elf to PKG (staged assets: daemon.elf + evict.elf + config.json)
- step_files copies both evict.elf and orbisrpc.bin to /data/GoldHEN/bin/elf/
- Pre-save config.json with Discord token so step_token() skips entry
- Move sceSystemServiceHideSplashScreen() to top of main() — eliminates
visible delay between splash hide and first dialog (ui_init() now
runs with splash already gone)
- Add installer/assets/config.json as PKG asset
- Explicitly list evict.elf and config.json in create-gp4 --files
- Update INSTALLER.md to reflect evict flow and no-sleep fact
Verified: PKG has all 3 assets, EBOOT matches, SHA-256 match, tests green
- Payload path: /data/GoldHEN/bin/elf/orbisrpc.bin (GoldHEN native launcher)
- Fix step_files copy bug: removed 'if(mk==0)' guard that skipped copy
when directory already existed (second install failed)
- Pad module for IME keyboard: ORBIS_SYSMODULE_INTERNAL_PAD + scePadInit()
- Restructure ui_init() to match apollo-ps4's initInternal()/initPad():
internal modules -> sceCommonDialogInitialize() -> PAD + scePadInit()
-> external modules. sceCommonDialogInitialize() before external loads.
- Remove sceKernelSleep(3) from main() (3-5s black screen at startup)
- Remove unused evict.elf from PKG build and Makefile stage rules
- Remove all /data/payloads references from code + docs
Verified: eboot matches, SHA-256 match after FTP, tests+asan green
- Load ORBIS_SYSMODULE_INTERNAL_PAD + scePadInit() in ui_init()
(apollo-ps4 pattern: IME needs PAD module for correct user context)
- Link -lScePad in Makefile
- Remove sceKernelSleep(3) from main() — was causing 3-5s black screen
sceSystemServiceHideSplashScreen() alone is sufficient
- Verify: eboot matches, SHA-256 match after FTP, tests+asan green