From 79c89f1f63088731d9792d1782429b25d81f0988 Mon Sep 17 00:00:00 2001 From: wheremyfoodat Date: Sat, 7 Jan 2023 03:30:32 +0200 Subject: [PATCH] Starting work on (Shared)ExtSaveData archive --- CMakeLists.txt | 5 ++++- include/fs/archive_ext_save_data.hpp | 16 ++++++++++++++++ include/fs/archive_ncch.hpp | 1 - include/fs/archive_save_data.hpp | 3 +-- include/fs/archive_sdmc.hpp | 3 +-- include/services/fs.hpp | 9 ++++++++- src/core/fs/archive_ext_save_data.cpp | 17 +++++++++++++++++ src/core/services/fs.cpp | 1 + 8 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 include/fs/archive_ext_save_data.hpp create mode 100644 src/core/fs/archive_ext_save_data.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index d69da150..18c711a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,7 +67,9 @@ set(PICA_SOURCE_FILES src/core/PICA/gpu.cpp src/core/PICA/regs.cpp src/core/PICA set(RENDERER_GL_SOURCE_FILES src/core/renderer_gl/renderer_gl.cpp) set(LOADER_SOURCE_FILES src/core/loader/elf.cpp src/core/loader/ncsd.cpp src/core/loader/ncch.cpp) -set(FS_SOURCE_FILES src/core/fs/archive_ncch.cpp src/core/fs/archive_save_data.cpp src/core/fs/archive_sdmc.cpp) +set(FS_SOURCE_FILES src/core/fs/archive_ncch.cpp src/core/fs/archive_save_data.cpp src/core/fs/archive_sdmc.cpp + src/core/fs/archive_ext_save_data.cpp +) set(HEADER_FILES include/emulator.hpp include/helpers.hpp include/opengl.hpp include/termcolor.hpp include/cpu.hpp include/cpu_dynarmic.hpp include/memory.hpp include/kernel/kernel.hpp @@ -84,6 +86,7 @@ set(HEADER_FILES include/emulator.hpp include/helpers.hpp include/opengl.hpp inc include/services/mic.hpp include/services/cecd.hpp include/renderer_gl/renderer_gl.hpp include/renderer_gl/surfaces.hpp include/renderer_gl/surface_cache.hpp include/services/ac.hpp include/services/am.hpp include/services/boss.hpp include/services/frd.hpp include/services/nim.hpp + include/fs/archive_ext_save_data.hpp ) set(THIRD_PARTY_SOURCE_FILES third_party/imgui/imgui.cpp diff --git a/include/fs/archive_ext_save_data.hpp b/include/fs/archive_ext_save_data.hpp new file mode 100644 index 00000000..973b2061 --- /dev/null +++ b/include/fs/archive_ext_save_data.hpp @@ -0,0 +1,16 @@ +#pragma once +#include "archive_base.hpp" + +class ExtSaveDataArchive : public ArchiveBase { +public: + ExtSaveDataArchive(Memory& mem) : ArchiveBase(mem) {} + + u64 getFreeBytes() override { Helpers::panic("ExtSaveData::GetFreeBytes unimplemented"); return 0; } + std::string name() override { return "ExtSaveData"; } + + bool openFile(const FSPath& path) override; + ArchiveBase* openArchive(const FSPath& path) override; + std::optional readFile(FileSession* file, u64 offset, u32 size, u32 dataPointer) override; + + bool isShared = false; +}; \ No newline at end of file diff --git a/include/fs/archive_ncch.hpp b/include/fs/archive_ncch.hpp index 7ece602c..b079e60d 100644 --- a/include/fs/archive_ncch.hpp +++ b/include/fs/archive_ncch.hpp @@ -2,7 +2,6 @@ #include "archive_base.hpp" class SelfNCCHArchive : public ArchiveBase { - public: SelfNCCHArchive(Memory& mem) : ArchiveBase(mem) {} diff --git a/include/fs/archive_save_data.hpp b/include/fs/archive_save_data.hpp index f1f38560..5ff9d8ba 100644 --- a/include/fs/archive_save_data.hpp +++ b/include/fs/archive_save_data.hpp @@ -2,11 +2,10 @@ #include "archive_base.hpp" class SaveDataArchive : public ArchiveBase { - public: SaveDataArchive(Memory& mem) : ArchiveBase(mem) {} - u64 getFreeBytes() override { return 0; } + u64 getFreeBytes() override { Helpers::panic("SaveData::GetFreeBytes unimplemented"); return 0; } std::string name() override { return "SaveData"; } bool openFile(const FSPath& path) override; diff --git a/include/fs/archive_sdmc.hpp b/include/fs/archive_sdmc.hpp index d3cebe25..fc271881 100644 --- a/include/fs/archive_sdmc.hpp +++ b/include/fs/archive_sdmc.hpp @@ -2,11 +2,10 @@ #include "archive_base.hpp" class SDMCArchive : public ArchiveBase { - public: SDMCArchive(Memory& mem) : ArchiveBase(mem) {} - u64 getFreeBytes() override { return 0; } + u64 getFreeBytes() override { Helpers::panic("SDMC::GetFreeBytes unimplemented"); return 0; } std::string name() override { return "SDMC"; } bool openFile(const FSPath& path) override; diff --git a/include/services/fs.hpp b/include/services/fs.hpp index 62f361ca..8dcfc854 100644 --- a/include/services/fs.hpp +++ b/include/services/fs.hpp @@ -1,4 +1,5 @@ #pragma once +#include "fs/archive_ext_save_data.hpp" #include "fs/archive_ncch.hpp" #include "fs/archive_save_data.hpp" #include "fs/archive_sdmc.hpp" @@ -20,6 +21,7 @@ class FSService { // The different filesystem archives (Save data, RomFS+ExeFS, etc) SelfNCCHArchive selfNcch; SaveDataArchive saveData; + ExtSaveDataArchive sharedExtSaveData; SDMCArchive sdmc; ArchiveBase* getArchiveFromID(u32 id); @@ -41,7 +43,12 @@ class FSService { u32 priority; public: - FSService(Memory& mem, Kernel& kernel) : mem(mem), saveData(mem), sdmc(mem), selfNcch(mem), kernel(kernel) {} + FSService(Memory& mem, Kernel& kernel) : mem(mem), saveData(mem), sharedExtSaveData(mem), sdmc(mem), selfNcch(mem), + kernel(kernel) + { + sharedExtSaveData.isShared = true; // Need to do this here because templates and virtual classes do not mix well + } + void reset(); void handleSyncRequest(u32 messagePointer); }; \ No newline at end of file diff --git a/src/core/fs/archive_ext_save_data.cpp b/src/core/fs/archive_ext_save_data.cpp new file mode 100644 index 00000000..be5dba50 --- /dev/null +++ b/src/core/fs/archive_ext_save_data.cpp @@ -0,0 +1,17 @@ +#include "fs/archive_ext_save_data.hpp" +#include + +bool ExtSaveDataArchive::openFile(const FSPath& path) { + Helpers::panic("ExtSaveDataArchive::OpenFile: Failed"); + return false; +} + +ArchiveBase* ExtSaveDataArchive::openArchive(const FSPath& path) { + Helpers::panic("ExtSaveDataArchive::OpenArchive: Failed. Path type: %d", path.type); + return nullptr; +} + +std::optional ExtSaveDataArchive::readFile(FileSession* file, u64 offset, u32 size, u32 dataPointer) { + Helpers::panic("ExtSaveDataArchive::ReadFile: Failed"); + return std::nullopt; +} \ No newline at end of file diff --git a/src/core/services/fs.cpp b/src/core/services/fs.cpp index a8a4d891..361aa64b 100644 --- a/src/core/services/fs.cpp +++ b/src/core/services/fs.cpp @@ -30,6 +30,7 @@ ArchiveBase* FSService::getArchiveFromID(u32 id) { switch (id) { case ArchiveID::SelfNCCH: return &selfNcch; case ArchiveID::SaveData: return &saveData; + case ArchiveID::SharedExtSaveData: return &sharedExtSaveData; case ArchiveID::SDMC: return &sdmc; default: Helpers::panic("Unknown archive. ID: %d\n", id);