From 5d298b6d950cfafdd9af5b64debb008b0c856807 Mon Sep 17 00:00:00 2001 From: Kikoarl <7354010+Kikoarl@users.noreply.github.com> Date: Sun, 11 Oct 2026 22:22:12 +0200 Subject: [PATCH 1/2] feat(libSceSysmodule): register libSceAudioPropagation module ID (0x120) --- core/libs/prx/libSceSysmodule/ModuleTable.hpp | 1 + core/libs/tests/GuestSysmodule.cpp | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/core/libs/prx/libSceSysmodule/ModuleTable.hpp b/core/libs/prx/libSceSysmodule/ModuleTable.hpp index 4840450be..0d9d7f4e7 100644 --- a/core/libs/prx/libSceSysmodule/ModuleTable.hpp +++ b/core/libs/prx/libSceSysmodule/ModuleTable.hpp @@ -155,6 +155,7 @@ inline const std::unordered_map kModuleTable = { {0x00000115, "libSceNpCppWebApi"}, {0x00000116, "libSceHubAppUtil"}, {0x0000011a, "libSceNpPartner001"}, + {0x00000120, "libSceAudioPropagation"}, {0x0000012f, "libSceFontGs"}, {0x00000135, "libSceFontGsm"}, {0x00000138, "libSceNpPartnerSubscription"}, diff --git a/core/libs/tests/GuestSysmodule.cpp b/core/libs/tests/GuestSysmodule.cpp index 4a63bbd37..be4462d41 100644 --- a/core/libs/tests/GuestSysmodule.cpp +++ b/core/libs/tests/GuestSysmodule.cpp @@ -147,4 +147,11 @@ int main() { Require(symbol != nullptr); Require(sceSysmoduleUnloadModule(kFiberModuleId) == 0); Require(sceSysmoduleGetModuleHandleInternal(kFiberModuleId, &handle) == kModuleUnloaded); + + constexpr std::uint16_t kAudioPropagationModuleId = 0x0120; + Require(sceSysmoduleIsLoaded(kAudioPropagationModuleId) == kModuleUnloaded); + Require(sceSysmoduleLoadModule(kAudioPropagationModuleId) == 0); + Require(sceSysmoduleIsLoaded(kAudioPropagationModuleId) == 0); + Require(sceSysmoduleUnloadModule(kAudioPropagationModuleId) == 0); + Require(sceSysmoduleIsLoaded(kAudioPropagationModuleId) == kModuleUnloaded); } From 7cf2ee844ac2c6549e5f58f69a9df4ca544d6569 Mon Sep 17 00:00:00 2001 From: Kikoarl <7354010+Kikoarl@users.noreply.github.com> Date: Mon, 12 Oct 2026 00:08:15 +0200 Subject: [PATCH 2/2] test(libSceSysmodule): verify handle and symbol resolution for libSceAudioPropagation --- core/libs/prx/libSceSysmodule/CMakeLists.txt | 4 +++- core/libs/tests/GuestSysmodule.cpp | 11 +++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/core/libs/prx/libSceSysmodule/CMakeLists.txt b/core/libs/prx/libSceSysmodule/CMakeLists.txt index 5f204ccf4..b03a2433c 100644 --- a/core/libs/prx/libSceSysmodule/CMakeLists.txt +++ b/core/libs/prx/libSceSysmodule/CMakeLists.txt @@ -12,9 +12,11 @@ if(BUILD_TESTING) add_custom_target(guest_sysmodule_runtime COMMAND "${CMAKE_COMMAND}" -E copy_if_different "$" "${guestSysmoduleRun}/libs/libSceFiber.prx" + COMMAND "${CMAKE_COMMAND}" -E copy_if_different + "$" "${guestSysmoduleRun}/libs/libSceAudioPropagation.prx" VERBATIM ) - add_dependencies(guest_sysmodule_runtime libSceFiber) + add_dependencies(guest_sysmodule_runtime libSceFiber libSceAudioPropagation) add_dependencies(guest_sysmodule_tests guest_sysmodule_runtime) add_test(NAME guest_sysmodule COMMAND guest_sysmodule_tests) set_tests_properties(guest_sysmodule PROPERTIES WORKING_DIRECTORY ${guestSysmoduleRun}) diff --git a/core/libs/tests/GuestSysmodule.cpp b/core/libs/tests/GuestSysmodule.cpp index be4462d41..fb2567d15 100644 --- a/core/libs/tests/GuestSysmodule.cpp +++ b/core/libs/tests/GuestSysmodule.cpp @@ -149,9 +149,20 @@ int main() { Require(sceSysmoduleGetModuleHandleInternal(kFiberModuleId, &handle) == kModuleUnloaded); constexpr std::uint16_t kAudioPropagationModuleId = 0x0120; + std::int32_t audioPropagationHandle = -1; + Require(sceSysmoduleGetModuleHandleInternal(kAudioPropagationModuleId, &audioPropagationHandle) == kModuleUnloaded); + Require(audioPropagationHandle == -1); + Require(sceSysmoduleIsLoaded(kAudioPropagationModuleId) == kModuleUnloaded); Require(sceSysmoduleLoadModule(kAudioPropagationModuleId) == 0); Require(sceSysmoduleIsLoaded(kAudioPropagationModuleId) == 0); + Require(sceSysmoduleGetModuleHandleInternal(kAudioPropagationModuleId, &audioPropagationHandle) == 0); + Require(audioPropagationHandle >= 0); + void* audioPropagationSymbol = nullptr; + Require(sceKernelDlsym(audioPropagationHandle, "sceAudioPropagationSystemCreate", &audioPropagationSymbol) == 0); + Require(audioPropagationSymbol != nullptr); + Require(sceSysmoduleUnloadModule(kAudioPropagationModuleId) == 0); Require(sceSysmoduleIsLoaded(kAudioPropagationModuleId) == kModuleUnloaded); + Require(sceSysmoduleGetModuleHandleInternal(kAudioPropagationModuleId, &audioPropagationHandle) == kModuleUnloaded); }