From 949c502d5de1dd865994ef6a30eb1d4489149f74 Mon Sep 17 00:00:00 2001 From: Jaby Date: Sat, 1 Oct 2022 22:40:40 +0200 Subject: [PATCH] Verify basic usage of FileProcessor --- include/PSX/File/Processor/File_Processor.hpp | 27 +++++++++++++++++ src/Library/src/BootLoader/gpu_boot.cpp | 5 ++++ .../src/File/Processor/TIM_Processor.cpp | 29 +++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 include/PSX/File/Processor/File_Processor.hpp create mode 100644 src/Library/src/File/Processor/TIM_Processor.cpp diff --git a/include/PSX/File/Processor/File_Processor.hpp b/include/PSX/File/Processor/File_Processor.hpp new file mode 100644 index 00000000..cc61fbaf --- /dev/null +++ b/include/PSX/File/Processor/File_Processor.hpp @@ -0,0 +1,27 @@ +#ifndef __JABYENGINE_FILE_PROCESSOR_HPP__ +#define __JABYENGINE_FILE_PROCESSOR_HPP__ +#include "../File_Types.hpp" + +namespace FileProcessor { + class State { + private: + struct Reserved { + uint32_t _reserved[2] = {0}; + }; + + typedef bool (*ProcessRoutine)(uint32_t*, size_t, Reserved&); + + private: + ProcessRoutine process_adr = nullptr; + Reserved reserved; + + public: + bool process(uint32_t* data, size_t size) { + return (*this->process_adr)(data, size, this->reserved); + } + }; + + State create(const SimpleTIM& file); +} + +#endif // !__JABYENGINE_FILE_PROCESSOR_HPP__ \ No newline at end of file diff --git a/src/Library/src/BootLoader/gpu_boot.cpp b/src/Library/src/BootLoader/gpu_boot.cpp index 99bc34b7..fdc5a562 100644 --- a/src/Library/src/BootLoader/gpu_boot.cpp +++ b/src/Library/src/BootLoader/gpu_boot.cpp @@ -1,4 +1,5 @@ #include "../../include/GPU/GPU.h" +#include #include namespace GPU { @@ -33,6 +34,10 @@ namespace GPU { //DMA End Display::enable(); + + //For now + auto state = FileProcessor::create(SimpleTIM(0, 0, 0, 0)); + while(state.process(nullptr, 0ull)); } void setup() { diff --git a/src/Library/src/File/Processor/TIM_Processor.cpp b/src/Library/src/File/Processor/TIM_Processor.cpp new file mode 100644 index 00000000..340159af --- /dev/null +++ b/src/Library/src/File/Processor/TIM_Processor.cpp @@ -0,0 +1,29 @@ +#define private public +#include +#include + +namespace FileProcessor { + union SimpleTIMState { + State::Reserved _reserved; + struct { + uint32_t test; + }; + + constexpr SimpleTIMState(uint32_t test = 0) : test(test) { + } + }; + static_assert(sizeof(SimpleTIMState) <= sizeof(State::Reserved)); + + static bool process(uint32_t*, size_t, SimpleTIMState &state) { + printf("Dino: %i\n", state.test); + return false; + } + + State create(const SimpleTIM& file) { + SimpleTIMState test(123); + + return State{.process_adr = reinterpret_cast(process), .reserved = test._reserved}; + } +} + +#undef private \ No newline at end of file