VSH boot: load real kd/ kernel driver modules

Extends LoadAndStartVshKernelModules() to load the 11 real kd/*.prx
kernel drivers for --vsh (dmacman, systimer, memlmd_01g,
loadexec_01g, lowio, idstorage, syscon, rtc, wlan, wlanfirm_01g, utility),
ahead of the existing 4 VSH-specific modules.
Only active when g_runningVSH, no effect on normal game boot.

Improve implementations of sceKernelSm1ReferOperations and sceKernelIsIntrContext.

Add some more MMIO stubs (GPIO, SYSCON).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GZq8ZtJmFY7bkX5FVkr3P9
(cherry picked from commit 7f3168b7df85e47438900016c9ee7d7ef01a0a28)
This commit is contained in:
Henrik Rydgård
2026-08-24 10:58:35 +02:00
parent 1d991557e8
commit ed5c05fb28
13 changed files with 199 additions and 2 deletions
+21
View File
@@ -1126,8 +1126,29 @@ static bool ShouldHLEModuleForLoad(std::string_view modname, bool *wasDisabledMa
// started as part of the kernel's own boot sequence, before any user module runs (matches
// JPCSP's moduleFileNamesToBeLoaded/moduleFileNamesVshOnly). We don't emulate that sequence,
// so approximate it here: load and start them ourselves right before starting the VSH itself.
//
// The first 11 paths mirror JPCSP's own HLEModuleManager module list for a --vsh boot (see
// docs/VSHBootInvestigation.md, Attempt 17) - confirmed via JPCSP's own log that it *actually
// loads and interprets these as real PRX code* (not a Java-side HLE shortcut): it uses the
// exact same generic hleKernelLoadAndStartModule() path used for any real module, and loading
// lowio.prx/wlan.prx/memlmd_01g.prx specifically flips JPCSP into full LLE CPU emulation
// (RuntimeContextLLE) for the rest of the boot. PPSSPP has no equivalent LLE-mode switch -
// these just load and run through the normal interpreter/JIT like any other PRX, same as the
// existing 4 VSH-specific modules below. Order matches JPCSP's load order exactly, in case
// later modules depend on earlier ones having already initialized.
static void LoadAndStartVshKernelModules() {
static const char *const vshKernelModulePaths[] = {
"flash0:/kd/dmacman.prx",
"flash0:/kd/systimer.prx",
"flash0:/kd/memlmd_01g.prx",
"flash0:/kd/loadexec_01g.prx",
"flash0:/kd/lowio.prx",
"flash0:/kd/idstorage.prx",
"flash0:/kd/syscon.prx",
"flash0:/kd/rtc.prx",
"flash0:/kd/wlan.prx",
"flash0:/kd/wlanfirm_01g.prx",
"flash0:/kd/utility.prx",
"flash0:/kd/vshbridge.prx",
"flash0:/vsh/module/paf.prx",
"flash0:/vsh/module/common_gui.prx",