mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-26 19:58:36 +01:00
HLE: implement assorted stubs and minor functionality
This is stuff encountered in the VSH boot research. sceRtc_driver, scePower_driver, sceImpose_driver, ThreadManForKernel funcs, sceRtcGetAlarmTick, sceHprm_driver/sceHprmReadLatch sceVshBridge_Driver imports sceKernelResumeDispatchThread, SuspendDispatchThread, and NotifyCallback from ThreadManForKernel, but they were only registered under ThreadManForUser. Added sceKernelGetUserLevel and sceKernelIsUserModeThread (new). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GZq8ZtJmFY7bkX5FVkr3P9
This commit is contained in:
1 parent
0686802715
commit
43dccd5903
12 files changed
+123
-3
No files matched your search
@@ -2121,6 +2121,23 @@ bool __KernelIsDispatchEnabled() {
|
||||
return dispatchEnabled && __InterruptsEnabled();
|
||||
}
|
||||
|
||||
// PPSSPP doesn't track a real per-module "user level" (set via the owning module's
|
||||
// PSP_MODULE_INFO attribute on real firmware, e.g. 0 for kernel-mode modules like the VSH's
|
||||
// bridge driver, 4 for a regular user-mode game). Approximate it from the calling thread's
|
||||
// kernel/user attr instead - the two levels VSH code actually seems to check for are "kernel"
|
||||
// vs "not kernel", so this is enough to avoid it treating itself as an ordinary user thread.
|
||||
int sceKernelGetUserLevel() {
|
||||
PSPThread *t = __GetCurrentThread();
|
||||
int level = (t && (t->nt.attr & PSP_THREAD_ATTR_KERNEL)) ? 0 : 4;
|
||||
return hleLogDebug(Log::sceKernel, level);
|
||||
}
|
||||
|
||||
int sceKernelIsUserModeThread() {
|
||||
PSPThread *t = __GetCurrentThread();
|
||||
int isUser = (t && (t->nt.attr & PSP_THREAD_ATTR_KERNEL)) ? 0 : 1;
|
||||
return hleLogDebug(Log::sceKernel, isUser);
|
||||
}
|
||||
|
||||
int KernelRotateThreadReadyQueue(int priority) {
|
||||
PSPThread *cur = __GetCurrentThread();
|
||||
|
||||
|
||||
Reference in new issue
Block a user