From 90e3569a4d42bfbb0161b8485519bffabe445b64 Mon Sep 17 00:00:00 2001 From: Jaby Date: Mon, 12 Dec 2022 04:18:35 +0100 Subject: [PATCH] Slowly come up with design for loading from CD --- .../PSX/File/Processor/cd_file_processor.hpp | 27 +++++++++++++++++++ include/PSX/File/cd_file_types.hpp | 23 +++++++++++++++- include/PSX/Overlay/overlay.hpp | 9 ++++--- .../src/File/Processor/cd_file_processor.cpp | 1 + .../{SimpleHelper.hpp => simplehelper.hpp} | 0 .../{TIM_Processor.cpp => tim_processor.cpp} | 2 +- 6 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 src/Library/src/File/Processor/cd_file_processor.cpp rename src/Library/src/File/Processor/{SimpleHelper.hpp => simplehelper.hpp} (100%) rename src/Library/src/File/Processor/{TIM_Processor.cpp => tim_processor.cpp} (99%) diff --git a/include/PSX/File/Processor/cd_file_processor.hpp b/include/PSX/File/Processor/cd_file_processor.hpp index 3d15f9aa..3fe9f0ae 100644 --- a/include/PSX/File/Processor/cd_file_processor.hpp +++ b/include/PSX/File/Processor/cd_file_processor.hpp @@ -1,5 +1,32 @@ #ifndef __JABYENGINE_CD_FILE_PROCESSOR_HPP__ #define __JABYENGINE_CD_FILE_PROCESSOR_HPP__ +#include "../cd_file_types.hpp" +#include "file_processor.hpp" + +namespace CDFileProcessor { + class State { + private: + FileProcessor::State file_processor_state; + const uint32_t* data_adr; + + public: + State() = default; + + void setup(uint16_t lba, uint16_t size, const CDFile::Payload& payload); + bool process(); + }; + + template + static void load_from_cd(const OverlayLBA* overlay_lbas, const CDFile (&cd_files)[Size]) { + State state; + + for(const auto& file : cd_files) { + const auto& lba_info = overlay_lbas[file.rel_lba_idx]; + + state.setup(lba_info.lba, lba_info.size, file.payload); + } + } +} // This will be used as the file processor but will work on cd types // Will probably use file_processor diff --git a/include/PSX/File/cd_file_types.hpp b/include/PSX/File/cd_file_types.hpp index 21729413..4a5bf26f 100644 --- a/include/PSX/File/cd_file_types.hpp +++ b/include/PSX/File/cd_file_types.hpp @@ -1,6 +1,27 @@ #ifndef __JABYENGINE_CD_FILE_TYPES_HPP__ #define __JABYENGINE_CD_FILE_TYPES_HPP__ +#include "../Overlay/overlay.hpp" +#include "file_types.hpp" -// Will extend the file_types for using cd types +enum struct CDFileType : uint8_t { + SimpleTIM = 0, + Custom +}; +struct __no_align CDFile { + union __no_align Payload { + uint32_t empty; + SimpleTIM simple_tim; + }; + + uint8_t rel_lba_idx; + CDFileType type; + Payload payload; +}; + +namespace CDFileBuilder { + static constexpr CDFile simple_tim(uint8_t rel_lba_idx, SimpleTIM simple_tim) { + return CDFile{.rel_lba_idx = rel_lba_idx, .type = CDFileType::SimpleTIM, .payload = {.simple_tim = simple_tim}}; + } +} #endif //!__JABYENGINE_CD_FILE_TYPES_HPP__ \ No newline at end of file diff --git a/include/PSX/Overlay/overlay.hpp b/include/PSX/Overlay/overlay.hpp index 57aa6959..affb1ac6 100644 --- a/include/PSX/Overlay/overlay.hpp +++ b/include/PSX/Overlay/overlay.hpp @@ -2,13 +2,14 @@ #define __JABYENGINE_OVERLAY__HPP__ #include "../../stdint.h" -typedef struct __attribute__((packed)) { +struct __attribute__((packed)) OverlayHeader { void (*execute)(); uint16_t lba_size; -} OverlayHeader; +}; -typedef struct __attribute__((packed)) { +// Maybe encode attributes like "isLZ4" into size parameter +struct __attribute__((packed)) OverlayLBA { uint16_t lba; uint16_t size; -} OverlayLBA; +}; #endif //!__JABYENGINE_OVERLAY__HPP__ \ No newline at end of file diff --git a/src/Library/src/File/Processor/cd_file_processor.cpp b/src/Library/src/File/Processor/cd_file_processor.cpp new file mode 100644 index 00000000..f7e77451 --- /dev/null +++ b/src/Library/src/File/Processor/cd_file_processor.cpp @@ -0,0 +1 @@ +#include \ No newline at end of file diff --git a/src/Library/src/File/Processor/SimpleHelper.hpp b/src/Library/src/File/Processor/simplehelper.hpp similarity index 100% rename from src/Library/src/File/Processor/SimpleHelper.hpp rename to src/Library/src/File/Processor/simplehelper.hpp diff --git a/src/Library/src/File/Processor/TIM_Processor.cpp b/src/Library/src/File/Processor/tim_processor.cpp similarity index 99% rename from src/Library/src/File/Processor/TIM_Processor.cpp rename to src/Library/src/File/Processor/tim_processor.cpp index db40c4c8..4ce91833 100644 --- a/src/Library/src/File/Processor/TIM_Processor.cpp +++ b/src/Library/src/File/Processor/tim_processor.cpp @@ -1,5 +1,5 @@ #include "../../../include/GPU/gpu.hpp" -#include "SimpleHelper.hpp" +#include "simplehelper.hpp" #include #include