diff --git a/Core/CMakeLists.txt b/Core/CMakeLists.txt index cb5b1a762a..ddf9d850f5 100644 --- a/Core/CMakeLists.txt +++ b/Core/CMakeLists.txt @@ -28,7 +28,6 @@ set(SRCS HLE/sceIo.cpp HLE/sceKernel.cpp HLE/sceKernelAlarm.cpp - HLE/sceKernelCallback.cpp HLE/sceKernelEventFlag.cpp HLE/sceKernelInterrupt.cpp HLE/sceKernelMemory.cpp diff --git a/Core/HLE/sceKernel.cpp b/Core/HLE/sceKernel.cpp index ff7a38f0fb..368cd1342a 100644 --- a/Core/HLE/sceKernel.cpp +++ b/Core/HLE/sceKernel.cpp @@ -105,6 +105,10 @@ void __KernelShutdown() kernelRunning = false; } +bool __KernelIsRunning() { + return kernelRunning; +} + void sceKernelExitGame() { INFO_LOG(HLE,"sceKernelExitGame"); diff --git a/Core/HLE/sceKernel.h b/Core/HLE/sceKernel.h index 509dbf3182..f48917da0a 100644 --- a/Core/HLE/sceKernel.h +++ b/Core/HLE/sceKernel.h @@ -240,6 +240,7 @@ struct SceKernelLoadExecParam void __KernelInit(); void __KernelShutdown(); +bool __KernelIsRunning(); bool __KernelLoadExec(const char *filename, SceKernelLoadExecParam *param); diff --git a/Core/HLE/sceKernelModule.cpp b/Core/HLE/sceKernelModule.cpp index ef1c137fae..2c1947007f 100644 --- a/Core/HLE/sceKernelModule.cpp +++ b/Core/HLE/sceKernelModule.cpp @@ -476,6 +476,9 @@ u32 __KernelGetModuleGP(SceUID module) bool __KernelLoadExec(const char *filename, SceKernelLoadExecParam *param, std::string *error_string) { // Wipe kernel here, loadexec should reset the entire system + if (__KernelIsRunning()) + __KernelShutdown(); + __KernelInit(); PSPFileInfo info = pspFileSystem.GetFileInfo(filename);