From 1c8a9e8b5688768db9d8adcc56710e23dd862752 Mon Sep 17 00:00:00 2001 From: wheremyfoodat Date: Wed, 21 Sep 2022 00:59:38 +0300 Subject: [PATCH] [GSP::GPU] Stub FlushDataCache --- include/services/gsp_gpu.hpp | 1 + src/core/services/gsp_gpu.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/include/services/gsp_gpu.hpp b/include/services/gsp_gpu.hpp index 73b8bd52..a456410d 100644 --- a/include/services/gsp_gpu.hpp +++ b/include/services/gsp_gpu.hpp @@ -26,6 +26,7 @@ class GPUService { // Service commands void acquireRight(u32 messagePointer); + void flushDataCache(u32 messagePointer); void registerInterruptRelayQueue(u32 messagePointer); void setLCDForceBlack(u32 messagePointer); void writeHwRegs(u32 messagePointer); diff --git a/src/core/services/gsp_gpu.cpp b/src/core/services/gsp_gpu.cpp index 6aa0f7e0..340f9561 100644 --- a/src/core/services/gsp_gpu.cpp +++ b/src/core/services/gsp_gpu.cpp @@ -6,6 +6,7 @@ namespace GPUCommands { RegisterInterruptRelayQueue = 0x00130042, WriteHwRegs = 0x00010082, WriteHwRegsWithMask = 0x00020084, + FlushDataCache = 0x00080082, SetLCDForceBlack = 0x000B0040 }; } @@ -26,6 +27,7 @@ void GPUService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); switch (command) { case GPUCommands::AcquireRight: acquireRight(messagePointer); break; + case GPUCommands::FlushDataCache: flushDataCache(messagePointer); break; case GPUCommands::RegisterInterruptRelayQueue: registerInterruptRelayQueue(messagePointer); break; case GPUCommands::SetLCDForceBlack: setLCDForceBlack(messagePointer); break; case GPUCommands::WriteHwRegs: writeHwRegs(messagePointer); break; @@ -148,8 +150,16 @@ void GPUService::writeHwRegsWithMask(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } +void GPUService::flushDataCache(u32 messagePointer) { + u32 address = mem.read32(messagePointer + 4); + u32 size = mem.read32(messagePointer + 8); + u32 processHandle = handle = mem.read32(messagePointer + 16); + printf("GSP::GPU::FlushDataCache(address = %08X, size = %X, process = %X\n", address, size, processHandle); +} + void GPUService::setLCDForceBlack(u32 messagePointer) { u32 flag = mem.read32(messagePointer + 4); + printf("GSP::GPU::SetLCDForceBlank(flag = %d)\n", flag); if (flag != 0) { printf("Filled both LCDs with black\n");