From 994cb875c12b773daf6d0233bb4e7c4497d2d87f Mon Sep 17 00:00:00 2001 From: wheremyfoodat Date: Tue, 20 Sep 2022 23:56:17 +0300 Subject: [PATCH] [GSP::GPU] Implement SetLCDForceBlack --- include/services/gsp_gpu.hpp | 1 + src/core/kernel/address_arbiter.cpp | 5 +++++ src/core/services/gsp_gpu.cpp | 12 +++++++++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/include/services/gsp_gpu.hpp b/include/services/gsp_gpu.hpp index 3a7c684e..73b8bd52 100644 --- a/include/services/gsp_gpu.hpp +++ b/include/services/gsp_gpu.hpp @@ -27,6 +27,7 @@ class GPUService { // Service commands void acquireRight(u32 messagePointer); void registerInterruptRelayQueue(u32 messagePointer); + void setLCDForceBlack(u32 messagePointer); void writeHwRegs(u32 messagePointer); void writeHwRegsWithMask(u32 messagePointer); diff --git a/src/core/kernel/address_arbiter.cpp b/src/core/kernel/address_arbiter.cpp index 451921ed..ea6237cb 100644 --- a/src/core/kernel/address_arbiter.cpp +++ b/src/core/kernel/address_arbiter.cpp @@ -67,6 +67,11 @@ void Kernel::arbitrateAddress() { break; } + case ArbitrationType::Signal: + printf("Broken ArbitrateAddress (type == SIGNAL)\n"); + switchThread(0); + break; + default: Helpers::panic("ArbitrateAddress: Unimplemented type %s", arbitrationTypeToString(type)); } diff --git a/src/core/services/gsp_gpu.cpp b/src/core/services/gsp_gpu.cpp index 0323ab75..6aa0f7e0 100644 --- a/src/core/services/gsp_gpu.cpp +++ b/src/core/services/gsp_gpu.cpp @@ -5,7 +5,8 @@ namespace GPUCommands { AcquireRight = 0x00160042, RegisterInterruptRelayQueue = 0x00130042, WriteHwRegs = 0x00010082, - WriteHwRegsWithMask = 0x00020084 + WriteHwRegsWithMask = 0x00020084, + SetLCDForceBlack = 0x000B0040 }; } @@ -26,6 +27,7 @@ void GPUService::handleSyncRequest(u32 messagePointer) { switch (command) { case GPUCommands::AcquireRight: acquireRight(messagePointer); break; case GPUCommands::RegisterInterruptRelayQueue: registerInterruptRelayQueue(messagePointer); break; + case GPUCommands::SetLCDForceBlack: setLCDForceBlack(messagePointer); break; case GPUCommands::WriteHwRegs: writeHwRegs(messagePointer); break; case GPUCommands::WriteHwRegsWithMask: writeHwRegsWithMask(messagePointer); break; ; default: Helpers::panic("GPU service requested. Command: %08X\n", command); @@ -144,4 +146,12 @@ void GPUService::writeHwRegsWithMask(u32 messagePointer) { } mem.write32(messagePointer + 4, Result::Success); +} + +void GPUService::setLCDForceBlack(u32 messagePointer) { + u32 flag = mem.read32(messagePointer + 4); + + if (flag != 0) { + printf("Filled both LCDs with black\n"); + } } \ No newline at end of file