diff --git a/include/services/ns.hpp b/include/services/ns.hpp index 0e615703..c435ba7e 100644 --- a/include/services/ns.hpp +++ b/include/services/ns.hpp @@ -10,6 +10,7 @@ class NSService { MAKE_LOG_FUNCTION(log, nsLogger) // Service commands + void launchTitle(u32 messagePointer); public: enum class Type { diff --git a/src/core/services/ns.cpp b/src/core/services/ns.cpp index 35cfcc2d..c260e2ed 100644 --- a/src/core/services/ns.cpp +++ b/src/core/services/ns.cpp @@ -3,7 +3,7 @@ namespace NSCommands { enum : u32 { - a, + LaunchTitle = 0x000200C0, }; } @@ -14,6 +14,18 @@ void NSService::handleSyncRequest(u32 messagePointer, Type type) { // ns:s commands switch (command) { + case NSCommands::LaunchTitle: launchTitle(messagePointer); break; + default: Helpers::panic("NS service requested. Command: %08X\n", command); } +} + +void NSService::launchTitle(u32 messagePointer) { + const u64 titleID = mem.read64(messagePointer + 4); + const u32 launchFlags = mem.read32(messagePointer + 12); + log("NS::LaunchTitle (title ID = %llX, launch flags = %X) (stubbed)\n", titleID, launchFlags); + + mem.write32(messagePointer, IPC::responseHeader(0x2, 2, 0)); + mem.write32(messagePointer + 4, Result::Success); + mem.write32(messagePointer + 8, 0); // Process ID } \ No newline at end of file