From 434827e11ebcf5a05ebb65a2928d6718b38d3ced Mon Sep 17 00:00:00 2001
From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com>
Date: Sun, 20 Aug 2023 03:43:26 +0300
Subject: [PATCH 1/2] Add svcGetThreadIdealProcessor

---
 include/kernel/kernel.hpp   | 1 +
 src/core/kernel/kernel.cpp  | 1 +
 src/core/kernel/threads.cpp | 9 +++++++++
 3 files changed, 11 insertions(+)

diff --git a/include/kernel/kernel.hpp b/include/kernel/kernel.hpp
index 8e924c4d..7439cabb 100644
--- a/include/kernel/kernel.hpp
+++ b/include/kernel/kernel.hpp
@@ -135,6 +135,7 @@ private:
 	void getSystemInfo();
 	void getSystemTick();
 	void getThreadID();
+	void getThreadIdealProcessor();
 	void getThreadPriority();
 	void sendSyncRequest();
 	void setThreadPriority();
diff --git a/src/core/kernel/kernel.cpp b/src/core/kernel/kernel.cpp
index 677a0d5f..408be358 100644
--- a/src/core/kernel/kernel.cpp
+++ b/src/core/kernel/kernel.cpp
@@ -35,6 +35,7 @@ void Kernel::serviceSVC(u32 svc) {
 		case 0x0A: svcSleepThread(); break;
 		case 0x0B: getThreadPriority(); break;
 		case 0x0C: setThreadPriority(); break;
+		case 0x0F: getThreadIdealProcessor(); break;
 		case 0x11: getCurrentProcessorNumber(); break;
 		case 0x13: svcCreateMutex(); break;
 		case 0x14: svcReleaseMutex(); break;
diff --git a/src/core/kernel/threads.cpp b/src/core/kernel/threads.cpp
index 2f6a27b9..19895b37 100644
--- a/src/core/kernel/threads.cpp
+++ b/src/core/kernel/threads.cpp
@@ -445,6 +445,15 @@ void Kernel::getThreadPriority() {
 	}
 }
 
+void Kernel::getThreadIdealProcessor() {
+	const Handle handle = regs[1];  // Thread handle
+	logSVC("GetThreadIdealProcessor (handle = %X)\n", handle);
+
+	// TODO: Not documented what this is or what it does. Citra doesn't implement it at all. Return AppCore as the ideal processor for now
+	regs[0] = Result::Success;
+	regs[1] = static_cast<u32>(ProcessorID::AppCore);
+}
+
 void Kernel::setThreadPriority() {
 	const Handle handle = regs[0];
 	const u32 priority = regs[1];

From 3292b051be97a0ff7bc522a8f37d19f1d7a09d5d Mon Sep 17 00:00:00 2001
From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com>
Date: Sun, 20 Aug 2023 03:45:24 +0300
Subject: [PATCH 2/2] [SDMH] Fix function not returning a value

---
 src/core/loader/ncch.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp
index 82148541..d3d05839 100644
--- a/src/core/loader/ncch.cpp
+++ b/src/core/loader/ncch.cpp
@@ -286,6 +286,7 @@ bool NCCH::parseSMDH(const std::vector<u8>& smdh) {
 	} else if (taiwan) {
 		region = Regions::Taiwan;
 	}
+	return true;
 }
 
 std::pair<bool, Crypto::AESKey> NCCH::getPrimaryKey(Crypto::AESEngine &aesEngine, const Crypto::AESKey &keyY) {