diff --git a/Core/HLE/sceKernelThread.cpp b/Core/HLE/sceKernelThread.cpp index b475dcbf55..a2dcc48858 100644 --- a/Core/HLE/sceKernelThread.cpp +++ b/Core/HLE/sceKernelThread.cpp @@ -1338,7 +1338,8 @@ bool __KernelSwitchToThread(SceUID threadID, const char *reason) void __KernelIdle() { - hleSkipDeadbeef(); + // Don't skip 0xDEADBEEF here, this is called directly bypassing CallSyscall(). + // That means the hle flag would stick around until the next call. CoreTiming::Idle(); // Advance must happen between Idle and Reschedule, so that threads that were waiting for something diff --git a/Core/MIPS/MIPSInt.cpp b/Core/MIPS/MIPSInt.cpp index 43ae88496f..f6c8c900e7 100644 --- a/Core/MIPS/MIPSInt.cpp +++ b/Core/MIPS/MIPSInt.cpp @@ -22,15 +22,15 @@ #include "math/math_util.h" #include "Common/Common.h" -#include "../Core.h" -#include "MIPS.h" -#include "MIPSInt.h" -#include "MIPSTables.h" +#include "Core/Core.h" +#include "Core/MIPS/MIPS.h" +#include "Core/MIPS/MIPSInt.h" +#include "Core/MIPS/MIPSTables.h" #include "Core/Reporting.h" #include "Core/Config.h" - -#include "../HLE/HLE.h" -#include "../System.h" +#include "Core/HLE/HLE.h" +#include "Core/HLE/HLETables.h" +#include "Core/System.h" #define R(i) (currentMIPS->r[i]) #define F(i) (currentMIPS->f[i]) @@ -159,7 +159,10 @@ namespace MIPSInt mipsr4k.pc += 4; } mipsr4k.inDelaySlot = false; - CallSyscall(op); + if (op == GetSyscallOp("FakeSysCalls", NID_IDLE)) + GetFunc("FakeSysCalls", NID_IDLE)->func(); + else + CallSyscall(op); } void Int_Sync(MIPSOpcode op)