diff --git a/include/kernel/kernel.hpp b/include/kernel/kernel.hpp index a1e60404..f16a5cce 100644 --- a/include/kernel/kernel.hpp +++ b/include/kernel/kernel.hpp @@ -82,6 +82,7 @@ class Kernel { void clearEvent(); void createAddressArbiter(); void createEvent(); + void createMutex(); void createThread(); void controlMemory(); void duplicateHandle(); diff --git a/src/core/kernel/kernel.cpp b/src/core/kernel/kernel.cpp index 66289da0..6cfc9ccd 100644 --- a/src/core/kernel/kernel.cpp +++ b/src/core/kernel/kernel.cpp @@ -24,6 +24,7 @@ void Kernel::serviceSVC(u32 svc) { case 0x02: queryMemory(); break; case 0x08: createThread(); break; case 0x0A: svcSleepThread(); break; + case 0x13: createMutex(); break; case 0x14: releaseMutex(); break; case 0x17: createEvent(); break; case 0x18: signalEvent(); break; diff --git a/src/core/kernel/threads.cpp b/src/core/kernel/threads.cpp index 7db8c3bf..8712c5af 100644 --- a/src/core/kernel/threads.cpp +++ b/src/core/kernel/threads.cpp @@ -213,6 +213,13 @@ void Kernel::getThreadID() { regs[1] = thread->getData()->index; } +void Kernel::createMutex() { + bool locked = regs[1] != 0; + Helpers::panic("CreateMutex (initially locked: %s)\n", locked ? "yes" : "no"); + + regs[0] = SVCResult::Success; +} + void Kernel::releaseMutex() { const Handle handle = regs[0];