feat(libkernel): implement sceKernelGetOperationMode

NH6xARDOVv8 is the NID of sceKernelGetOperationMode. PPSA12544 passes two
int outputs and logs them as mode and submode; both are reported as 0.
B2n8aDorSH4 and PZQhiiLXRFs are sceKernelSyncOnAddressWait32 and
sceKernelSyncOnAddressWait64, implemented by #633, and are no longer added
as unimplemented exports.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Merijn 2026-10-05 19:02:21 +02:00
parent 8f6328242d
commit 4a548c0ba5
3 changed files with 9 additions and 19 deletions

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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`