From 1ddba7737f5a4f5cc4634dd7fcac270b54fbe92e Mon Sep 17 00:00:00 2001 From: wheremyfoodat Date: Mon, 10 Oct 2022 23:44:52 +0300 Subject: [PATCH] Add empty cfg:u service --- CMakeLists.txt | 4 ++-- include/kernel/handles.hpp | 14 ++++++++------ include/logger.hpp | 1 + include/services/cfg.hpp | 15 +++++++++++++++ include/services/service_manager.hpp | 2 ++ src/core/services/cfg.cpp | 21 +++++++++++++++++++++ src/core/services/service_manager.cpp | 7 ++++++- 7 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 include/services/cfg.hpp create mode 100644 src/core/services/cfg.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 8e446432..7e6a48a4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,7 +55,7 @@ set(KERNEL_SOURCE_FILES src/core/kernel/kernel.cpp src/core/kernel/resource_limi ) set(SERVICE_SOURCE_FILES src/core/services/service_manager.cpp src/core/services/apt.cpp src/core/services/hid.cpp src/core/services/fs.cpp src/core/services/gsp_gpu.cpp src/core/services/gsp_lcd.cpp - src/core/services/ndm.cpp src/core/services/dsp.cpp + src/core/services/ndm.cpp src/core/services/dsp.cpp src/core/services/cfg.cpp ) set(PICA_SOURCE_FILES src/core/PICA/gpu.cpp src/core/PICA/regs.cpp src/core/PICA/shader_unit.cpp src/core/PICA/shader_interpreter.cpp src/core/PICA/renderer_opengl.cpp @@ -73,7 +73,7 @@ set(HEADER_FILES include/emulator.hpp include/helpers.hpp include/opengl.hpp inc include/PICA/shader.hpp include/PICA/shader_unit.hpp include/PICA/float_types.hpp include/logger.hpp include/loader/ncch.hpp include/loader/ncsd.hpp include/io_file.hpp include/loader/lz77.hpp include/fs/archive_base.hpp include/fs/archive_ncch.hpp - include/services/dsp.hpp + include/services/dsp.hpp include/services/cfg.hpp ) set(THIRD_PARTY_SOURCE_FILES third_party/imgui/imgui.cpp diff --git a/include/kernel/handles.hpp b/include/kernel/handles.hpp index 54a4bd79..ce30e99e 100644 --- a/include/kernel/handles.hpp +++ b/include/kernel/handles.hpp @@ -11,12 +11,13 @@ namespace KernelHandles { CurrentThread = 0xFFFF8000, // Used by the original kernel CurrentProcess = 0xFFFF8001, // Used by the original kernel APT = 0xFFFF8002, // App Title something service? - HID = 0xFFFF8003, // Handles everything input-related including gyro - FS = 0xFFFF8004, // Filesystem service - GPU = 0xFFFF8005, // GPU service - DSP = 0xFFFF8006, // DSP service (Used for audio decoding and output) - LCD = 0xFFFF8007, // LCD service (Used for configuring the displays) - NDM = 0xFFFF8008, // ????? + CFG = 0xFFFF8003, // Console & region info + HID = 0xFFFF8004, // Handles everything input-related including gyro + FS = 0xFFFF8005, // Filesystem service + GPU = 0xFFFF8006, // GPU service + DSP = 0xFFFF8007, // DSP service (Used for audio decoding and output) + LCD = 0xFFFF8008, // LCD service (Used for configuring the displays) + NDM = 0xFFFF8009, // ????? MinServiceHandle = APT, MaxServiceHandle = NDM, @@ -48,6 +49,7 @@ namespace KernelHandles { static const char* getServiceName(Handle handle) { switch (handle) { case APT: return "APT"; + case CFG: return "CFG"; case HID: return "HID"; case FS: return "FS"; case DSP: return "DSP"; diff --git a/include/logger.hpp b/include/logger.hpp index 98dc4091..e746118b 100644 --- a/include/logger.hpp +++ b/include/logger.hpp @@ -27,6 +27,7 @@ namespace Log { // Service loggers static Logger aptLogger; + static Logger cfgLogger; static Logger dspServiceLogger; static Logger fsLogger; static Logger hidLogger; diff --git a/include/services/cfg.hpp b/include/services/cfg.hpp new file mode 100644 index 00000000..3db2772a --- /dev/null +++ b/include/services/cfg.hpp @@ -0,0 +1,15 @@ +#pragma once +#include "helpers.hpp" +#include "logger.hpp" +#include "memory.hpp" + +class CFGService { + Handle handle = KernelHandles::CFG; + Memory& mem; + MAKE_LOG_FUNCTION(log, cfgLogger) + +public: + CFGService(Memory& mem) : mem(mem) {} + void reset(); + void handleSyncRequest(u32 messagePointer); +}; \ No newline at end of file diff --git a/include/services/service_manager.hpp b/include/services/service_manager.hpp index eef16cf4..ddbe5fd7 100644 --- a/include/services/service_manager.hpp +++ b/include/services/service_manager.hpp @@ -4,6 +4,7 @@ #include "logger.hpp" #include "memory.hpp" #include "services/apt.hpp" +#include "services/cfg.hpp" #include "services/dsp.hpp" #include "services/hid.hpp" #include "services/fs.hpp" @@ -19,6 +20,7 @@ class ServiceManager { MAKE_LOG_FUNCTION(log, srvLogger) APTService apt; + CFGService cfg; DSPService dsp; HIDService hid; FSService fs; diff --git a/src/core/services/cfg.cpp b/src/core/services/cfg.cpp new file mode 100644 index 00000000..7e8273be --- /dev/null +++ b/src/core/services/cfg.cpp @@ -0,0 +1,21 @@ +#include "services/cfg.hpp" + +namespace CFGCommands { + enum : u32 { + }; +} + +namespace Result { + enum : u32 { + Success = 0, + }; +} + +void CFGService::reset() {} + +void CFGService::handleSyncRequest(u32 messagePointer) { + const u32 command = mem.read32(messagePointer); + switch (command) { + default: Helpers::panic("CFG service requested. Command: %08X\n", command); + } +} \ No newline at end of file diff --git a/src/core/services/service_manager.cpp b/src/core/services/service_manager.cpp index 0c567656..598598fc 100644 --- a/src/core/services/service_manager.cpp +++ b/src/core/services/service_manager.cpp @@ -1,10 +1,12 @@ #include "services/service_manager.hpp" ServiceManager::ServiceManager(std::array& regs, Memory& mem, GPU& gpu, u32& currentPID, Kernel& kernel) - : regs(regs), mem(mem), apt(mem), dsp(mem), hid(mem), fs(mem, kernel), gsp_gpu(mem, gpu, currentPID), gsp_lcd(mem), ndm(mem) {} + : regs(regs), mem(mem), apt(mem), cfg(mem), dsp(mem), hid(mem), fs(mem, kernel), gsp_gpu(mem, gpu, currentPID), + gsp_lcd(mem), ndm(mem) {} void ServiceManager::reset() { apt.reset(); + cfg.reset(); dsp.reset(); hid.reset(); fs.reset(); @@ -75,6 +77,8 @@ void ServiceManager::getServiceHandle(u32 messagePointer) { handle = KernelHandles::APT; } else if (service == "APT:U") { handle = KernelHandles::APT; + } else if (service == "cfg:u") { + handle = KernelHandles::CFG; } else if (service == "dsp::DSP") { handle = KernelHandles::DSP; } else if (service == "hid:USER") { @@ -114,6 +118,7 @@ void ServiceManager::receiveNotification(u32 messagePointer) { void ServiceManager::sendCommandToService(u32 messagePointer, Handle handle) { switch (handle) { case KernelHandles::APT: apt.handleSyncRequest(messagePointer); break; + case KernelHandles::CFG: cfg.handleSyncRequest(messagePointer); break; case KernelHandles::DSP: dsp.handleSyncRequest(messagePointer); break; case KernelHandles::HID: hid.handleSyncRequest(messagePointer); break; case KernelHandles::FS: fs.handleSyncRequest(messagePointer); break;