diff --git a/core/libs/prx/libkernel/System/src/Process.cpp b/core/libs/prx/libkernel/System/src/Process.cpp index 7755b1543..a3838db51 100644 --- a/core/libs/prx/libkernel/System/src/Process.cpp +++ b/core/libs/prx/libkernel/System/src/Process.cpp @@ -321,4 +321,12 @@ int APS5_VABI sceKernelIsTrinityMode(void) { return 0; } +int APS5_VABI sceKernelGetOperationMode(int* mode, int* submode) { + if (!mode || !submode) + throw std::invalid_argument("sceKernelGetOperationMode: null output"); + *mode = 0; + *submode = 0; + return 0; +} + } diff --git a/core/libs/prx/libkernel/Unimplemented.cpp b/core/libs/prx/libkernel/Unimplemented.cpp index 025f33969..64e5093db 100644 --- a/core/libs/prx/libkernel/Unimplemented.cpp +++ b/core/libs/prx/libkernel/Unimplemented.cpp @@ -30,24 +30,6 @@ int APS5_VABI sceKernelUnknown02(void) { NotImplemented_nid_no_patch("0D4-FVvEikw"); return 0; } -APS5_EXPORT("B2n8aDorSH4", sceKernelUnknown_B2n8aDorSH4); -int APS5_VABI sceKernelUnknown_B2n8aDorSH4(void) { - NotImplemented_nid_no_patch("B2n8aDorSH4"); - return 0; -} - -APS5_EXPORT("NH6xARDOVv8", sceKernelUnknown_NH6xARDOVv8); -int APS5_VABI sceKernelUnknown_NH6xARDOVv8(void) { - NotImplemented_nid_no_patch("NH6xARDOVv8"); - return 0; -} - -APS5_EXPORT("PZQhiiLXRFs", sceKernelUnknown_PZQhiiLXRFs); -int APS5_VABI sceKernelUnknown_PZQhiiLXRFs(void) { - NotImplemented_nid_no_patch("PZQhiiLXRFs"); - return 0; -} - int APS5_VABI sceKernelFchmod(void) { NotImplemented_nid_no_patch(__func__); return 0; diff --git a/docs/dev/TechnicalDebt.md b/docs/dev/TechnicalDebt.md index 058a342c8..bf025de38 100644 --- a/docs/dev/TechnicalDebt.md +++ b/docs/dev/TechnicalDebt.md @@ -63,7 +63,7 @@ Throughout the project, every function at every stage either **does exactly what - [dbOlWdppb4o, vieBRwlh1Lw](../../core/libs/prx/libSceAgc/Unimplemented.cpp) (libSceAgc) - unknown name, signature - [OQ-dzhlnM28, qBS714-Jr3g, tB59hFLH3SA](../../core/libs/prx/libc/src/HeapDiagnostics.cpp) (libSceLibcInternalExt, implemented in libc) - unknown name, signature - [fCWdlnmB1Ks](../../core/libs/prx/libScePad/Export.cpp) (libScePad) - unknown name, signature -- [B2n8aDorSH4, NH6xARDOVv8, PZQhiiLXRFs](../../core/libs/prx/libkernel/Unimplemented.cpp) (libkernel) - unknown name, signature +- [sceKernelGetOperationMode](../../core/libs/prx/libkernel/System/src/Process.cpp) (libkernel) - the signature `(int* mode, int* submode)` comes from PPSA12544, which logs both values after the call; the values are unknown and 0 is reported for both, as in the [prosper](https://github.com/mattias800/prosper/pull/4153) reimplementation. Null outputs throw - Font, Http2, Net, Ssl, SystemService and libkernel exports imported by PPSA12544 and added without an implementation have unknown signatures - [libSceAudioPropagation](../../core/libs/prx/libSceAudioPropagation/Export.cpp) (libSceAudioPropagation) - signatures and struct descriptors recovered from PPSA21567's calls (#481), not from documentation. The system options layout is unknown (only checked for non-null); the fourth argument of `sceAudioPropagationSourceCalculateAudioPaths` is unknown; `sceAudioPropagationSourceGetAudioPath` is assumed to output an 8-byte path handle. The meaning of the `RenderInfo` word at +0x28 is unknown (PPSA21567 and PPSA21564 pass 2); only 2 is accepted. Both titles pass one `RenderInfo` per call: a count of 0 throws, and larger counts are handled element by element without proof. No error code is known, so invalid input throws instead of returning one - [sceAvPlayerStartEx](../../core/libs/prx/libSceAvPlayer/Export.cpp) (libSceAvPlayer) - start info layout unknown; it is ignored and playback starts as with `sceAvPlayerStart`