From 384e920559ae153e36de84ba54b556252f2efc93 Mon Sep 17 00:00:00 2001 From: wheremyfoodat Date: Fri, 17 Mar 2023 03:58:02 +0200 Subject: [PATCH] [BOSS] Stub functions for Pokemon X/Y --- include/services/boss.hpp | 2 ++ src/core/services/boss.cpp | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/include/services/boss.hpp b/include/services/boss.hpp index 3d9f71c7..182f74ec 100644 --- a/include/services/boss.hpp +++ b/include/services/boss.hpp @@ -12,8 +12,10 @@ class BOSSService { // Service commands void initializeSession(u32 messagePointer); void getOptoutFlag(u32 messagePointer); + void getStorageEntryInfo(u32 messagePointer); // Unknown what this is, name taken from Citra void getTaskIdList(u32 messagePointer); void receiveProperty(u32 messagePointer); + void unregisterStorage(u32 messagePointer); s8 optoutFlag; public: diff --git a/src/core/services/boss.cpp b/src/core/services/boss.cpp index 2947f1da..afce9f1a 100644 --- a/src/core/services/boss.cpp +++ b/src/core/services/boss.cpp @@ -3,9 +3,11 @@ namespace BOSSCommands { enum : u32 { InitializeSession = 0x00010082, + UnregisterStorage = 0x00030000, GetOptoutFlag = 0x000A0000, GetTaskIdList = 0x000E0000, - ReceiveProperty = 0x00160082 + ReceiveProperty = 0x00160082, + GetStorageEntryInfo = 0x00300000 }; } @@ -23,9 +25,11 @@ void BOSSService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); switch (command) { case BOSSCommands::GetOptoutFlag: getOptoutFlag(messagePointer); break; + case BOSSCommands::GetStorageEntryInfo: getStorageEntryInfo(messagePointer); break; case BOSSCommands::GetTaskIdList: getTaskIdList(messagePointer); break; case BOSSCommands::InitializeSession: initializeSession(messagePointer); break; case BOSSCommands::ReceiveProperty: receiveProperty(messagePointer); break; + case BOSSCommands::UnregisterStorage: unregisterStorage(messagePointer); break; default: Helpers::panic("BOSS service requested. Command: %08X\n", command); } } @@ -46,6 +50,13 @@ void BOSSService::getTaskIdList(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } +void BOSSService::getStorageEntryInfo(u32 messagePointer) { + log("BOSS::GetStorageEntryInfo (undocumented)\n"); + mem.write32(messagePointer + 4, Result::Success); + mem.write32(messagePointer + 8, 0); // u32, unknown meaning + mem.write16(messagePointer + 12, 0); // s16, unknown meaning +} + void BOSSService::receiveProperty(u32 messagePointer) { const u32 id = mem.read32(messagePointer + 4); const u32 size = mem.read32(messagePointer + 8); @@ -54,4 +65,9 @@ void BOSSService::receiveProperty(u32 messagePointer) { log("BOSS::ReceiveProperty(stubbed) (id = %d, size = %08X, ptr = %08X)\n", id, size, ptr); mem.write32(messagePointer + 4, Result::Success); mem.write32(messagePointer + 8, 0); // Read size +} + +void BOSSService::unregisterStorage(u32 messagePointer) { + log("BOSS::UnregisterStorage (stubbed)\n"); + mem.write32(messagePointer + 4, Result::Success); } \ No newline at end of file