HLE: add the 5.xx NIDs the VSH of that era imports

sceKernelLoadModuleVSH, sceKernelGetModel, and four of sceImpose_driver's calls
already have implementations; 5.xx just asks for them under different NIDs, so
the 5.50 shell got nothing back. Each one was identified by disassembling that
firmware's own module and comparing the body against 6.61's, where the same
function is exported under a name - the pairs are instruction-for-instruction
identical apart from context-struct offsets.

GetModel was the one that mattered most: unresolved, vshbridge handed the shell
a garbage model number, and it went looking for PSP-3000 resources on a dump
that has none.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Henrik Rydgård
2026-09-10 10:48:32 -06:00
co-authored by Claude Opus 5
parent 765d5bfbcf
commit 1a3f14acd0
3 changed files with 20 additions and 0 deletions
+4
View File
@@ -3196,6 +3196,10 @@ const HLEFunction ModuleMgrForKernel[] = {
// module id 0 back and the sceKernelStartModule after it failed with UNKNOWN_MODULE.
// NOTE: new entries go at the end - the syscall opcode in a savestate is an index into this array.
{0xA4370E7C, &WrapU_CUU<sceKernelLoadModuleVSH>, "sceKernelLoadModuleVSH", 'x', "sxx", HLE_KERNEL_SYSCALL },
// And the 5.x NID for it, confirmed the same way: in 5.50's modulemgr.prx this NID has the
// identical callee set to 6.61's 0xD5DDAB1F. Without it 5.50's vshbridge couldn't load the
// XMB plugins (opening_plugin, impose_plugin, ...) and the VSH stopped at a black screen.
{0xCCDE84A8, &WrapU_CUU<sceKernelLoadModuleVSH>, "sceKernelLoadModuleVSH", 'x', "sxx", HLE_KERNEL_SYSCALL },
};
void Register_ModuleMgrForUser() {