From eb307b9cd9510e675cc9325b3f092644c14fed5e Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Thu, 19 Oct 2023 17:02:49 +0300 Subject: [PATCH] draft fs design --- CMakeLists.txt | 5 ++- .../FileSystem/generic_file_system.h | 25 +++++++++++++++ .../LibKernel/FileSystem/meta_file_system.cpp | 20 ++++++++++++ .../LibKernel/FileSystem/meta_file_system.h | 32 +++++++++++++++++++ 4 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 src/Emulator/HLE/Libraries/LibKernel/FileSystem/generic_file_system.h create mode 100644 src/Emulator/HLE/Libraries/LibKernel/FileSystem/meta_file_system.cpp create mode 100644 src/Emulator/HLE/Libraries/LibKernel/FileSystem/meta_file_system.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 05d277e6..7b872a8d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,6 +49,9 @@ set(FILESYSTEM_SOURCES src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_syst src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.h src/Emulator/HLE/Libraries/LibKernel/FileSystem/posix_file_system.cpp src/Emulator/HLE/Libraries/LibKernel/FileSystem/posix_file_system.h + src/Emulator/HLE/Libraries/LibKernel/FileSystem/generic_file_system.h + src/Emulator/HLE/Libraries/LibKernel/FileSystem/meta_file_system.h + src/Emulator/HLE/Libraries/LibKernel/FileSystem/meta_file_system.cpp ) set(UTIL_SOURCES src/Emulator/Util/singleton.h @@ -95,7 +98,7 @@ add_executable(shadps4 src/Core/PS4/HLE/Kernel/cpu_management.cpp src/Core/PS4/HLE/Kernel/cpu_management.h - "src/Util/Disassembler.cpp" "src/Util/Disassembler.h" "src/Core/PS4/Util/aerolib.h" "src/Core/PS4/Loader/SymbolsResolver.h" "src/Core/PS4/Loader/SymbolsResolver.cpp" "src/Core/PS4/HLE/Libs.cpp" "src/Core/PS4/HLE/Libs.h" "src/Core/PS4/HLE/LibC.cpp" "src/Core/PS4/HLE/LibC.h" "src/Lib/Timer.cpp" "src/Lib/Timer.h" "src/Core/PS4/HLE/LibKernel.cpp" "src/Core/PS4/HLE/LibKernel.h" "src/Core/PS4/HLE/LibSceGnmDriver.cpp" "src/Core/PS4/HLE/LibSceGnmDriver.h" "src/Core/PS4/HLE/Kernel/ThreadManagement.cpp" "src/Core/PS4/HLE/Kernel/ThreadManagement.h" "src/Core/PS4/HLE/ErrorCodes.h" "src/debug.h" "src/Core/PS4/HLE/Kernel/memory_management.cpp" "src/Core/PS4/HLE/Kernel/memory_management.h" "src/Core/PS4/GPU/gpu_memory.cpp" "src/Core/PS4/GPU/gpu_memory.h" "src/emulator.cpp" "src/emulator.h" "src/Core/PS4/HLE/Kernel/Objects/event_queue.h" "src/Core/PS4/HLE/Kernel/Objects/event_queue.cpp" "src/Core/PS4/HLE/Graphics/Objects/video_out_ctx.cpp" "src/Core/PS4/HLE/Graphics/Objects/video_out_ctx.h" "src/Core/PS4/HLE/Graphics/graphics_ctx.h" "src/vulkan_util.cpp" "src/vulkan_util.h" "src/Core/PS4/GPU/video_out_buffer.cpp" "src/Core/PS4/GPU/video_out_buffer.h" "src/Core/PS4/HLE/Graphics/graphics_render.cpp" "src/Core/PS4/HLE/Graphics/graphics_render.h" "src/Core/PS4/GPU/tile_manager.cpp" "src/Core/PS4/GPU/tile_manager.h" "src/version.h" "src/Emulator/HLE/Libraries/LibSystemService/system_service.cpp" "src/Emulator/HLE/Libraries/LibSystemService/system_service.h") + "src/Util/Disassembler.cpp" "src/Util/Disassembler.h" "src/Core/PS4/Util/aerolib.h" "src/Core/PS4/Loader/SymbolsResolver.h" "src/Core/PS4/Loader/SymbolsResolver.cpp" "src/Core/PS4/HLE/Libs.cpp" "src/Core/PS4/HLE/Libs.h" "src/Core/PS4/HLE/LibC.cpp" "src/Core/PS4/HLE/LibC.h" "src/Lib/Timer.cpp" "src/Lib/Timer.h" "src/Core/PS4/HLE/LibKernel.cpp" "src/Core/PS4/HLE/LibKernel.h" "src/Core/PS4/HLE/LibSceGnmDriver.cpp" "src/Core/PS4/HLE/LibSceGnmDriver.h" "src/Core/PS4/HLE/Kernel/ThreadManagement.cpp" "src/Core/PS4/HLE/Kernel/ThreadManagement.h" "src/Core/PS4/HLE/ErrorCodes.h" "src/debug.h" "src/Core/PS4/HLE/Kernel/memory_management.cpp" "src/Core/PS4/HLE/Kernel/memory_management.h" "src/Core/PS4/GPU/gpu_memory.cpp" "src/Core/PS4/GPU/gpu_memory.h" "src/emulator.cpp" "src/emulator.h" "src/Core/PS4/HLE/Kernel/Objects/event_queue.h" "src/Core/PS4/HLE/Kernel/Objects/event_queue.cpp" "src/Core/PS4/HLE/Graphics/Objects/video_out_ctx.cpp" "src/Core/PS4/HLE/Graphics/Objects/video_out_ctx.h" "src/Core/PS4/HLE/Graphics/graphics_ctx.h" "src/vulkan_util.cpp" "src/vulkan_util.h" "src/Core/PS4/GPU/video_out_buffer.cpp" "src/Core/PS4/GPU/video_out_buffer.h" "src/Core/PS4/HLE/Graphics/graphics_render.cpp" "src/Core/PS4/HLE/Graphics/graphics_render.h" "src/Core/PS4/GPU/tile_manager.cpp" "src/Core/PS4/GPU/tile_manager.h" "src/version.h" "src/Emulator/HLE/Libraries/LibSystemService/system_service.cpp" "src/Emulator/HLE/Libraries/LibSystemService/system_service.h" "src/Emulator/HLE/Libraries/LibKernel/FileSystem/meta_file_system.h" "src/Emulator/HLE/Libraries/LibKernel/FileSystem/meta_file_system.cpp") find_package(OpenGL REQUIRED) target_link_libraries(shadps4 PUBLIC fmt mincore spdlog IMGUI SDL3-shared ${OPENGL_LIBRARY} vulkan-1 spirv-tools-opt spirv-tools) diff --git a/src/Emulator/HLE/Libraries/LibKernel/FileSystem/generic_file_system.h b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/generic_file_system.h new file mode 100644 index 00000000..c43f15a5 --- /dev/null +++ b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/generic_file_system.h @@ -0,0 +1,25 @@ +#pragma once +#include + +#include + +namespace Emulator::Host::GenericFS { + +enum FileAccess { + FILEACCESS_READ = 0, + FILEACCESS_WRITE = 1, + FILEACCESS_READWRITE = 2 + +}; + +class GenericHandleAllocator { + public: + virtual u32 requestHandle() = 0; + virtual void releaseHandle(u32 handle) = 0; +}; + +class AbstractFileSystem { + virtual u32 openFile(std::string filename, FileAccess access) = 0; + virtual void closeFile(u32 handle) = 0; +}; +} // namespace Emulator::Host::GenericFS \ No newline at end of file diff --git a/src/Emulator/HLE/Libraries/LibKernel/FileSystem/meta_file_system.cpp b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/meta_file_system.cpp new file mode 100644 index 00000000..bcf17192 --- /dev/null +++ b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/meta_file_system.cpp @@ -0,0 +1,20 @@ +#include "meta_file_system.h" + +namespace Emulator::Host::GenericFS { + +void MetaFileSystem::mount(std::string prefix, AbstractFileSystem* system) {} + +void MetaFileSystem::unMount(AbstractFileSystem* system) {} + +void MetaFileSystem::unMountAll() {} + +bool MetaFileSystem::mapFilePath(std::string inpath, std::string* outpath, AbstractFileSystem** system) { return false; } + +void MetaFileSystem::releaseHandle(u32 handle) {} + +u32 MetaFileSystem::openFile(std::string filename, FileAccess access) { return u32(); } + +void MetaFileSystem::closeFile(u32 handle) {} + + +} // namespace Emulator::Host::GenericFS \ No newline at end of file diff --git a/src/Emulator/HLE/Libraries/LibKernel/FileSystem/meta_file_system.h b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/meta_file_system.h new file mode 100644 index 00000000..17b959c9 --- /dev/null +++ b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/meta_file_system.h @@ -0,0 +1,32 @@ +#pragma once +#include +#include +#include +#include "generic_file_system.h" + +namespace Emulator::Host::GenericFS { + +class MetaFileSystem : public GenericHandleAllocator, AbstractFileSystem { + struct System { + std::string prefix; + AbstractFileSystem *system; + }; + + u32 current; + std::vector fileSystems; + std::string currentDirectory; + + public: + MetaFileSystem() : current(0) {} + + void mount(std::string prefix, AbstractFileSystem *system); + void unMount(AbstractFileSystem *system); + void unMountAll(); + AbstractFileSystem *getHandleOwner(u32 handle); + bool mapFilePath(std::string inpath, std::string *outpath, AbstractFileSystem **system); + u32 requestHandle() { return ++current; } + void releaseHandle(u32 handle); + u32 openFile(std::string filename, FileAccess access); + void closeFile(u32 handle); +}; +} \ No newline at end of file