From a2237f8e47a214d7baebd8df2460c990a45bb683 Mon Sep 17 00:00:00 2001 From: Maz Date: Thu, 15 Oct 2026 12:44:00 +0400 Subject: [PATCH 1/2] fix(libSceAcm): silent stub for sceAcmBatchJobPriority PPSA02530 stops when the unknown-signature import throws; return 0 with no batch-job priority and list it under Silent stubs. --- core/libs/prx/libSceAcm/Export.cpp | 1 - core/libs/tests/GuestAcm.cpp | 2 ++ docs/dev/debt/libSceAcm.md | 6 +----- docs/dev/debt/libScePad.md | 1 + 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/core/libs/prx/libSceAcm/Export.cpp b/core/libs/prx/libSceAcm/Export.cpp index 97dfc19d910b..f523b7546037 100644 --- a/core/libs/prx/libSceAcm/Export.cpp +++ b/core/libs/prx/libSceAcm/Export.cpp @@ -62,7 +62,6 @@ int APS5_VABI sceAcm_Panner(void) { } int APS5_VABI sceAcmBatchJobPriority(void) { - NotImplemented_nid_no_patch(__func__); return 0; } diff --git a/core/libs/tests/GuestAcm.cpp b/core/libs/tests/GuestAcm.cpp index e360f84445a8..7eaab768b90e 100644 --- a/core/libs/tests/GuestAcm.cpp +++ b/core/libs/tests/GuestAcm.cpp @@ -12,6 +12,7 @@ int APS5_VABI sceAcmBatchWait(std::uint32_t, std::uint32_t, std::uint32_t); int APS5_VABI sceAcm_ConvReverb_SharedInput(void); int APS5_VABI sceAcm_FFT(void); int APS5_VABI sceAcm_Panner(void); +int APS5_VABI sceAcmBatchJobPriority(void); } static void Require(bool value) { @@ -36,6 +37,7 @@ int main() { Require(sceAcm_ConvReverb_SharedInput() == 0); Require(sceAcm_FFT() == 0); Require(sceAcm_Panner() == 0); + Require(sceAcmBatchJobPriority() == 0); Require(sceAcmContextDestroy(context) == 0); } diff --git a/docs/dev/debt/libSceAcm.md b/docs/dev/debt/libSceAcm.md index c5c9b90f30b3..68145330c753 100644 --- a/docs/dev/debt/libSceAcm.md +++ b/docs/dev/debt/libSceAcm.md @@ -3,8 +3,4 @@ ### Silent stubs - [libSceAcm](../../../core/libs/prx/libSceAcm/Export.cpp) batches execute as silent no-ops, so `sceAcm_ConvReverb_SharedInput`, `sceAcm_FFT` and `sceAcm_Panner` return success without encoding audio commands. - -### Unknown function info - -- PPSA02530 imports declared without parameters, signatures unknown, added without an implementation because the title fails to load without them: [sceAcmBatchJobPriority](../../../core/libs/prx/libSceAcm/Export.cpp) (libSceAcm) and [scePadVrControllerGetTriggerEffectStates](../../../core/libs/prx/libScePad/Export.cpp) (libScePad). - +- [sceAcmBatchJobPriority](../../../core/libs/prx/libSceAcm/Export.cpp) returns 0; PPSA02530 imports it with an unknown signature and stops when it throws. No batch-job priority on the host. Covered by `guest_acm` diff --git a/docs/dev/debt/libScePad.md b/docs/dev/debt/libScePad.md index b828591f2b34..1757edb58bf8 100644 --- a/docs/dev/debt/libScePad.md +++ b/docs/dev/debt/libScePad.md @@ -2,6 +2,7 @@ ### Unknown function info +- PPSA02530 imports declared without parameters, signatures unknown, added without an implementation because the title fails to load without them: [scePadVrControllerGetTriggerEffectStates](../../../core/libs/prx/libScePad/Export.cpp) (libScePad) - [scePadSetAngularVelocityDeadbandState](../../../core/libs/prx/libScePad/src/PadState.cpp) (libScePad) - with the deadband on, each angular velocity axis whose magnitude is below 0.017453292 rad/s (1 degree per second) reads as 0, before the orientation is integrated; it starts off. Threshold, per-axis test and default follow [duaLib](https://github.com/WujekFoliarz/duaLib/blob/03bad1bea2a36561b520846776f2a07ced6773e0/src/source/duaLib.cpp#L44), which reimplements the PC `libScePad.dll`; the console's threshold is not measured, and the deadband is kept per library rather than per handle since one pad handle exists - [scePadOpen and scePadOpenExt](../../../core/libs/prx/libScePad/Export.cpp) (libScePad) - special ports (type 2) return `DEVICE_NOT_CONNECTED` (0x80920007) because the host has no special controller, and `scePadGetHandle` has no handle for them; whether the console opens a handle and reports the device as disconnected later is unknown. scePadOpenExt handles only special ports. PPSA01317 passes a 16-byte param that names the device by vendor and product id (`b7 0e 04 0e ...` for 0x0eb7:0x0e04) and skips the user on any negative result. Other port types throw - [scePadVrControllerReadState](../../../core/libs/prx/libScePad/Export.cpp) (libScePad, NID `iA-DdobUen8`) - the name hashes to the imported NID; the `(int handle, void* state)` signature follows [PS5VR](https://github.com/theghostonline/PS5VR/blob/0e408909ce7a39891a2e06eee3438d07a09e11e3/app/src/app_vr.c#L326-L369) (PPSA99177), which passes a PS VR2 Sense controller handle from `scePadOpen` type 3 or 4 and a 0x68-byte state it reads as buttons at 0, stick bytes at 4 and a connected byte at 0x40. The title calls it only after `sceHmd2Initialize` succeeds, which it does not here, so every call throws; the state layout is otherwise unknown From cc854e9a2bcc05f481070554b3d58ba81f6e1f28 Mon Sep 17 00:00:00 2001 From: Maz Date: Thu, 15 Oct 2026 19:28:21 +0400 Subject: [PATCH 2/2] Revert "fix(libSceAcm): silent stub for sceAcmBatchJobPriority" This reverts commit a2237f8e47a214d7baebd8df2460c990a45bb683. --- core/libs/prx/libSceAcm/Export.cpp | 1 + core/libs/tests/GuestAcm.cpp | 2 -- docs/dev/debt/libSceAcm.md | 6 +++++- docs/dev/debt/libScePad.md | 1 - 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/core/libs/prx/libSceAcm/Export.cpp b/core/libs/prx/libSceAcm/Export.cpp index f523b7546037..97dfc19d910b 100644 --- a/core/libs/prx/libSceAcm/Export.cpp +++ b/core/libs/prx/libSceAcm/Export.cpp @@ -62,6 +62,7 @@ int APS5_VABI sceAcm_Panner(void) { } int APS5_VABI sceAcmBatchJobPriority(void) { + NotImplemented_nid_no_patch(__func__); return 0; } diff --git a/core/libs/tests/GuestAcm.cpp b/core/libs/tests/GuestAcm.cpp index 7eaab768b90e..e360f84445a8 100644 --- a/core/libs/tests/GuestAcm.cpp +++ b/core/libs/tests/GuestAcm.cpp @@ -12,7 +12,6 @@ int APS5_VABI sceAcmBatchWait(std::uint32_t, std::uint32_t, std::uint32_t); int APS5_VABI sceAcm_ConvReverb_SharedInput(void); int APS5_VABI sceAcm_FFT(void); int APS5_VABI sceAcm_Panner(void); -int APS5_VABI sceAcmBatchJobPriority(void); } static void Require(bool value) { @@ -37,7 +36,6 @@ int main() { Require(sceAcm_ConvReverb_SharedInput() == 0); Require(sceAcm_FFT() == 0); Require(sceAcm_Panner() == 0); - Require(sceAcmBatchJobPriority() == 0); Require(sceAcmContextDestroy(context) == 0); } diff --git a/docs/dev/debt/libSceAcm.md b/docs/dev/debt/libSceAcm.md index 68145330c753..c5c9b90f30b3 100644 --- a/docs/dev/debt/libSceAcm.md +++ b/docs/dev/debt/libSceAcm.md @@ -3,4 +3,8 @@ ### Silent stubs - [libSceAcm](../../../core/libs/prx/libSceAcm/Export.cpp) batches execute as silent no-ops, so `sceAcm_ConvReverb_SharedInput`, `sceAcm_FFT` and `sceAcm_Panner` return success without encoding audio commands. -- [sceAcmBatchJobPriority](../../../core/libs/prx/libSceAcm/Export.cpp) returns 0; PPSA02530 imports it with an unknown signature and stops when it throws. No batch-job priority on the host. Covered by `guest_acm` + +### Unknown function info + +- PPSA02530 imports declared without parameters, signatures unknown, added without an implementation because the title fails to load without them: [sceAcmBatchJobPriority](../../../core/libs/prx/libSceAcm/Export.cpp) (libSceAcm) and [scePadVrControllerGetTriggerEffectStates](../../../core/libs/prx/libScePad/Export.cpp) (libScePad). + diff --git a/docs/dev/debt/libScePad.md b/docs/dev/debt/libScePad.md index 1757edb58bf8..b828591f2b34 100644 --- a/docs/dev/debt/libScePad.md +++ b/docs/dev/debt/libScePad.md @@ -2,7 +2,6 @@ ### Unknown function info -- PPSA02530 imports declared without parameters, signatures unknown, added without an implementation because the title fails to load without them: [scePadVrControllerGetTriggerEffectStates](../../../core/libs/prx/libScePad/Export.cpp) (libScePad) - [scePadSetAngularVelocityDeadbandState](../../../core/libs/prx/libScePad/src/PadState.cpp) (libScePad) - with the deadband on, each angular velocity axis whose magnitude is below 0.017453292 rad/s (1 degree per second) reads as 0, before the orientation is integrated; it starts off. Threshold, per-axis test and default follow [duaLib](https://github.com/WujekFoliarz/duaLib/blob/03bad1bea2a36561b520846776f2a07ced6773e0/src/source/duaLib.cpp#L44), which reimplements the PC `libScePad.dll`; the console's threshold is not measured, and the deadband is kept per library rather than per handle since one pad handle exists - [scePadOpen and scePadOpenExt](../../../core/libs/prx/libScePad/Export.cpp) (libScePad) - special ports (type 2) return `DEVICE_NOT_CONNECTED` (0x80920007) because the host has no special controller, and `scePadGetHandle` has no handle for them; whether the console opens a handle and reports the device as disconnected later is unknown. scePadOpenExt handles only special ports. PPSA01317 passes a 16-byte param that names the device by vendor and product id (`b7 0e 04 0e ...` for 0x0eb7:0x0e04) and skips the user on any negative result. Other port types throw - [scePadVrControllerReadState](../../../core/libs/prx/libScePad/Export.cpp) (libScePad, NID `iA-DdobUen8`) - the name hashes to the imported NID; the `(int handle, void* state)` signature follows [PS5VR](https://github.com/theghostonline/PS5VR/blob/0e408909ce7a39891a2e06eee3438d07a09e11e3/app/src/app_vr.c#L326-L369) (PPSA99177), which passes a PS VR2 Sense controller handle from `scePadOpen` type 3 or 4 and a 0x68-byte state it reads as buttons at 0, stick bytes at 4 and a connected byte at 0x40. The title calls it only after `sceHmd2Initialize` succeeds, which it does not here, so every call throws; the state layout is otherwise unknown