From 5c5c7cd79c81682759b4526199f495d7a6f60f44 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Mon, 9 Nov 2026 19:29:18 +0100 Subject: [PATCH] fix: read shadps4 sys_modules from its user folder sys_modules/ is below shadPS4's user folder: user/ in the working directory, else the XDG data folder (path_util.cpp:88-124). Batocera and KNULLI start it from /userdata/system/configs/shadps4, so their packs no longer carry bios/shadps4/sys_modules, which nothing read, and name the modules instead. EmuDeck keeps its link at bios/shadps4/sys_modules, and RetroBat places them in emulators/shadps4/user/sys_modules. --- emulators/shadps4.yml | 66 ++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/emulators/shadps4.yml b/emulators/shadps4.yml index 4256ad93e..46db72954 100644 --- a/emulators/shadps4.yml +++ b/emulators/shadps4.yml @@ -17,6 +17,11 @@ cores: systems: - ps4 mode: standalone +standalone_directories: + - "getcwd/user" + - "PORTABLE_DIR" + - "$XDG_DATA_HOME/shadPS4" + - "$HOME/.local/share/shadPS4" analysis_date: "2026-08-10" analysis_commit: "891612c8" @@ -45,28 +50,31 @@ notes: | - font/ from /preinst/common/font/ - font2/ from /system/common/font2/ - Batocera configgen (shadps4Generator.py) configures display, input, and - saves but does not map BIOS/firmware paths. The emulator uses its own - user directory for sys_modules/ and fonts/. + The paths below are relative to the user folder: user/ in the working + directory when it exists, else $XDG_DATA_HOME/shadPS4 or + ~/.local/share/shadPS4 on Linux and %APPDATA%/shadPS4 on Windows + (src/common/path_util.cpp:88-110). sys_modules/ is below it + (path_util.cpp:124) unless sysModulesPath in the config names another + folder (src/core/emulator_settings.cpp:190-195, 535). files: - name: "libSceLibcInternal.sprx" required: false hle_fallback: true - path: "shadps4/sys_modules/libSceLibcInternal.sprx" + path: "sys_modules/libSceLibcInternal.sprx" description: "PS4 C standard library" source_ref: "src/core/linker.cpp:80-91" - name: "libSceNgs2.sprx" required: false hle_fallback: true - path: "shadps4/sys_modules/libSceNgs2.sprx" + path: "sys_modules/libSceNgs2.sprx" description: "PS4 next-generation audio system" source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:217" - name: "libSceUlt.sprx" required: false - path: "shadps4/sys_modules/libSceUlt.sprx" + path: "sys_modules/libSceUlt.sprx" description: "PS4 user-level threading library" note: "No HLE implementation. The module is stubbed when absent." source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:218" @@ -74,13 +82,13 @@ files: - name: "libSceRtc.sprx" required: false hle_fallback: true - path: "shadps4/sys_modules/libSceRtc.sprx" + path: "sys_modules/libSceRtc.sprx" description: "PS4 real-time clock library" source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:221" - name: "libSceJpegDec.sprx" required: false - path: "shadps4/sys_modules/libSceJpegDec.sprx" + path: "sys_modules/libSceJpegDec.sprx" description: "PS4 JPEG decoder" note: "No HLE implementation. The module is stubbed when absent." source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:222" @@ -88,83 +96,83 @@ files: - name: "libSceJpegEnc.sprx" required: false hle_fallback: true - path: "shadps4/sys_modules/libSceJpegEnc.sprx" + path: "sys_modules/libSceJpegEnc.sprx" description: "PS4 JPEG encoder" source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:223" - name: "libScePngEnc.sprx" required: false hle_fallback: true - path: "shadps4/sys_modules/libScePngEnc.sprx" + path: "sys_modules/libScePngEnc.sprx" description: "PS4 PNG encoder" source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:225" - name: "libSceJson.sprx" required: false - path: "shadps4/sys_modules/libSceJson.sprx" + path: "sys_modules/libSceJson.sprx" description: "PS4 JSON parser" note: "No HLE implementation. The module is stubbed when absent." source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:226" - name: "libSceJson2.sprx" required: false - path: "shadps4/sys_modules/libSceJson2.sprx" + path: "sys_modules/libSceJson2.sprx" description: "PS4 JSON v2 parser" note: "No HLE implementation. The module is stubbed when absent." source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:227" - name: "libSceCesCs.sprx" required: false - path: "shadps4/sys_modules/libSceCesCs.sprx" + path: "sys_modules/libSceCesCs.sprx" description: "PS4 character encoding conversion" note: "No HLE implementation. The module is stubbed when absent." source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:228" - name: "libSceAt9Enc.sprx" required: false - path: "shadps4/sys_modules/libSceAt9Enc.sprx" + path: "sys_modules/libSceAt9Enc.sprx" description: "PS4 ATRAC9 encoder" note: "No HLE implementation. The module is stubbed when absent." source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:229" - name: "libSceAudiodec.sprx" required: false - path: "shadps4/sys_modules/libSceAudiodec.sprx" + path: "sys_modules/libSceAudiodec.sprx" description: "PS4 audio decoder" note: "No HLE implementation. The module is stubbed when absent." source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:230" - name: "libSceAudiodecCpu.sprx" required: false - path: "shadps4/sys_modules/libSceAudiodecCpu.sprx" + path: "sys_modules/libSceAudiodecCpu.sprx" description: "PS4 CPU audio decoder" note: "No HLE implementation. The module is stubbed when absent." source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:231" - name: "libSceAudiodecCpuDdp.sprx" required: false - path: "shadps4/sys_modules/libSceAudiodecCpuDdp.sprx" + path: "sys_modules/libSceAudiodecCpuDdp.sprx" description: "PS4 CPU Dolby Digital Plus decoder" note: "No HLE implementation. The module is stubbed when absent." source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:232" - name: "libSceAudiodecCpuM4aac.sprx" required: false - path: "shadps4/sys_modules/libSceAudiodecCpuM4aac.sprx" + path: "sys_modules/libSceAudiodecCpuM4aac.sprx" description: "PS4 CPU AAC decoder" note: "No HLE implementation. The module is stubbed when absent." source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:233" - name: "libSceAudiodecCpuDtsHdLbr.sprx" required: false - path: "shadps4/sys_modules/libSceAudiodecCpuDtsHdLbr.sprx" + path: "sys_modules/libSceAudiodecCpuDtsHdLbr.sprx" description: "PS4 CPU DTS-HD LBR decoder" note: "No HLE implementation. The module is stubbed when absent." source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:234" - name: "libSceAudiodecCpuHevag.sprx" required: false - path: "shadps4/sys_modules/libSceAudiodecCpuHevag.sprx" + path: "sys_modules/libSceAudiodecCpuHevag.sprx" description: "PS4 CPU HEVAG decoder" note: "No HLE implementation. The module is stubbed when absent." source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:235" @@ -172,34 +180,34 @@ files: - name: "libSceFont.sprx" required: false hle_fallback: true - path: "shadps4/sys_modules/libSceFont.sprx" + path: "sys_modules/libSceFont.sprx" description: "PS4 font rendering library" source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:236" - name: "libSceFontFt.sprx" required: false hle_fallback: true - path: "shadps4/sys_modules/libSceFontFt.sprx" + path: "sys_modules/libSceFontFt.sprx" description: "PS4 FreeType font library" source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:237" - name: "libSceFreeTypeOt.sprx" required: false - path: "shadps4/sys_modules/libSceFreeTypeOt.sprx" + path: "sys_modules/libSceFreeTypeOt.sprx" description: "PS4 FreeType OpenType library" note: "No HLE implementation. The module is stubbed when absent." source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:238" - name: "libSceFreeTypeOl.sprx" required: false - path: "shadps4/sys_modules/libSceFreeTypeOl.sprx" + path: "sys_modules/libSceFreeTypeOl.sprx" description: "PS4 FreeType outline library" note: "No HLE implementation. The module is stubbed when absent." source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:239" - name: "libSceFreeTypeOptOl.sprx" required: false - path: "shadps4/sys_modules/libSceFreeTypeOptOl.sprx" + path: "sys_modules/libSceFreeTypeOptOl.sprx" description: "PS4 FreeType optimised outline library" note: "No HLE implementation. The module is stubbed when absent." source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:240" @@ -207,13 +215,13 @@ files: - name: "libSceRudp.sprx" required: false hle_fallback: true - path: "shadps4/sys_modules/libSceRudp.sprx" + path: "sys_modules/libSceRudp.sprx" description: "PS4 reliable UDP library" source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:244" - name: "libSceWkFontConfig.sprx" required: false - path: "shadps4/sys_modules/libSceWkFontConfig.sprx" + path: "sys_modules/libSceWkFontConfig.sprx" description: "PS4 WebKit font configuration" note: "No HLE implementation. The module is stubbed when absent." source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:245" @@ -221,13 +229,13 @@ files: - name: "libSceSystemGesture.sprx" required: false hle_fallback: true - path: "shadps4/sys_modules/libSceSystemGesture.sprx" + path: "sys_modules/libSceSystemGesture.sprx" description: "PS4 system gesture recognition" source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:250" - name: "libSceXml.sprx" required: false - path: "shadps4/sys_modules/libSceXml.sprx" + path: "sys_modules/libSceXml.sprx" description: "PS4 XML parser" note: "No HLE implementation. The module is stubbed when absent." source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:251"