120 lines
4.0 KiB
C++
120 lines
4.0 KiB
C++
#include "../include/asset_mgr.hpp"
|
|
#include "Overlay/Overlays.hpp"
|
|
#include <PSX/File/Processor/cd_file_processor.hpp>
|
|
#include <PSX/AutoLBA/auto_lba.hpp>
|
|
#include <PSX/AutoLBA/auto_lba_declaration.hpp>
|
|
#include <stdio.h>
|
|
|
|
extern "C" uint32_t __bios_info_start;
|
|
extern "C" uint32_t __controller_tests_start;
|
|
extern "C" uint32_t __gpu_tests_start;
|
|
extern "C" uint32_t __screen_center_start;
|
|
|
|
namespace Assets {
|
|
enum LBA {
|
|
__jabyengine_start_lba_request
|
|
__jabyengine_request_lba_for(PACO, "ASSETS/MAIN/PACO.BIN"),
|
|
__jabyengine_request_lba_for(DFISH, "ASSETS/MAIN/DFISH.BIN"),
|
|
__jabyengine_request_lba_for(BIOS_INFO_OVL, "BIO.BIN"),
|
|
__jabyengine_request_lba_for(GPU_TEST_OVL, "GTO.BIN"),
|
|
__jabyengine_request_lba_for(GTE_TEST_OVL, "GTE.BIN"),
|
|
__jabyengine_request_lba_for(CONT_TEST_OVL, "CTO.BIN"),
|
|
__jabyengine_request_lba_for(FONT_CYC_OVL, "FCO.BIN"),
|
|
__jabyengine_request_lba_for(SCREEN_CENT_OVL, "SCO.BIN"),
|
|
__jabyengine_end_lba_request
|
|
};
|
|
__declare_lba_header(LBA);
|
|
|
|
static void load(const volatile AutoLBAEntry* lba, const CDFile* assets, size_t size) {
|
|
const auto buffer_cfg = CDFileProcessor::BufferConfiguration::new_default();
|
|
CDFileProcessor file_processor;
|
|
|
|
file_processor.setup(lba, CDFileProcessor::JobArray{assets, size}, buffer_cfg);
|
|
while(true) {
|
|
switch(file_processor.process()) {
|
|
case Progress::InProgress:
|
|
break;
|
|
|
|
case Progress::Done:
|
|
if(!file_processor.next(lba, buffer_cfg)) {
|
|
return;
|
|
}
|
|
break;
|
|
|
|
case Progress::Error:
|
|
printf("Error detected! Aborting load\n");
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
template<size_t N>
|
|
static void load(const volatile AutoLBAEntry* lba, const CDFile (&files)[N]) {
|
|
return load(lba, files, N);
|
|
}
|
|
|
|
namespace Main {
|
|
static const CDFile Files[] = {
|
|
CDFileBuilder::simple_tim(LBA::PACO, PacoTIM),
|
|
CDFileBuilder::simple_tim(LBA::DFISH, DoenerFishInfo.tim)
|
|
};
|
|
|
|
void load() {
|
|
::Assets::load(lba, Files);
|
|
}
|
|
}
|
|
|
|
namespace Overlay {
|
|
// TODO: All these loadings can be done by one function taking the LBA of ther overlay, the new LBA and the new Asset array
|
|
|
|
void load_bios_info() {
|
|
const CDFile Files[] = {
|
|
CDFileBuilder::overlay(LBA::BIOS_INFO_OVL, &__bios_info_start)
|
|
};
|
|
|
|
::Assets::load(lba, Files);
|
|
}
|
|
|
|
void load_controller_test() {
|
|
const CDFile Files[] = {
|
|
CDFileBuilder::overlay(LBA::CONT_TEST_OVL, &__controller_tests_start)
|
|
};
|
|
|
|
::Assets::load(lba, Files);
|
|
::Assets::load(ControllerTest::lba, ControllerTest::Assets);
|
|
}
|
|
|
|
void load_gpu_test() {
|
|
const CDFile Files[] = {
|
|
CDFileBuilder::overlay(LBA::GPU_TEST_OVL, &__gpu_tests_start)
|
|
};
|
|
|
|
::Assets::load(lba, Files);
|
|
::Assets::load(GPUTest::lba, GPUTest::Assets);
|
|
}
|
|
|
|
void load_gte_test() {
|
|
const CDFile Files[] = {
|
|
CDFileBuilder::overlay(LBA::GTE_TEST_OVL, &__gpu_tests_start)
|
|
};
|
|
|
|
::Assets::load(lba, Files);
|
|
}
|
|
|
|
void load_font_cycler() {
|
|
const CDFile Files[] = {
|
|
CDFileBuilder::overlay(LBA::FONT_CYC_OVL, &__screen_center_start)
|
|
};
|
|
|
|
::Assets::load(lba, Files);
|
|
}
|
|
|
|
void load_screen_center() {
|
|
const CDFile Files[] = {
|
|
CDFileBuilder::overlay(LBA::SCREEN_CENT_OVL, &__screen_center_start)
|
|
};
|
|
|
|
::Assets::load(lba, Files);
|
|
}
|
|
}
|
|
} |