From e8d4c2fdeb0559ec406902e834969b7b3a6a80c3 Mon Sep 17 00:00:00 2001 From: Jaby Date: Tue, 27 Dec 2022 22:06:14 +0100 Subject: [PATCH] Setup LZ4 decompressor but have it copy data for now --- include/PSX/Auxiliary/lz4_decompressor.hpp | 3 ++ .../src/Auxiliary/lz4_decompressor.cpp | 3 ++ src/Library/src/BootLoader/gpu_boot.cpp | 29 +++++++++++++++++-- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/include/PSX/Auxiliary/lz4_decompressor.hpp b/include/PSX/Auxiliary/lz4_decompressor.hpp index 48583ba7..07d5c1f7 100644 --- a/include/PSX/Auxiliary/lz4_decompressor.hpp +++ b/include/PSX/Auxiliary/lz4_decompressor.hpp @@ -21,6 +21,9 @@ namespace JabyEngine { public: LZ4Decompressor() = default; + LZ4Decompressor(uint8_t* dst_adr) : LZ4Decompressor() { + LZ4Decompressor::setup(dst_adr); + } void setup(uint8_t* dst_adr); void reset(); diff --git a/src/Library/src/Auxiliary/lz4_decompressor.cpp b/src/Library/src/Auxiliary/lz4_decompressor.cpp index b10bb092..f2069eb8 100644 --- a/src/Library/src/Auxiliary/lz4_decompressor.cpp +++ b/src/Library/src/Auxiliary/lz4_decompressor.cpp @@ -11,6 +11,9 @@ namespace JabyEngine { } Progress LZ4Decompressor :: process(const uint8_t* data, size_t size) { + for(size_t n = 0; n < size; n++) { + this->dst_adr[n] = data[n]; + } return Progress::Error; } } \ 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 24424ddf..655a8992 100644 --- a/src/Library/src/BootLoader/gpu_boot.cpp +++ b/src/Library/src/BootLoader/gpu_boot.cpp @@ -1,6 +1,8 @@ #include "../../include/GPU/gpu.hpp" #include +#include #include +#include #ifdef JABYENGINE_PAL #include "splash_image_pal_boot.hpp" @@ -8,11 +10,34 @@ #include "splash_image_ntsc_boot.hpp" #endif //JABYENGINE_PAL +extern "C" uint32_t __boot_loader_end; + namespace JabyEngine { - namespace GPU { + namespace GPU { + static void decompress_logo() { + LZ4Decompressor lz4_decomp(reinterpret_cast(&__boot_loader_end)); + + switch(lz4_decomp.process(SplashScreen, sizeof(SplashScreen))) { + case Progress::InProgress: + printf("Decompressing still in progress...\n"); + break; + + case Progress::Error: + printf("Error decompressing!!!\n"); + break; + + case Progress::Done: + printf("Done decompressing\n"); + break; + } + } + void display_logo() { + decompress_logo(); + // Upload SplashScreen picture - auto state = FileProcessor::create(reinterpret_cast(SplashScreen), SimpleTIM(32, 0, 0, 0)); + auto state = FileProcessor::create(&__boot_loader_end, SimpleTIM(32, 0, 0, 0)); + // v this will not be correct for now... while(state.process((sizeof(SplashScreen)/sizeof(uint32_t))) == Progress::InProgress); Display::enable();