From da86be4b8ae1387afcaf42fb175782884c35de10 Mon Sep 17 00:00:00 2001 From: Angie Date: Fri, 21 Jun 2024 19:41:34 -0400 Subject: [PATCH] Move the other save functions to recomp namespace --- librecomp/include/librecomp/save.hpp | 9 ++++++++- librecomp/src/flash.cpp | 24 +++++++++++------------- librecomp/src/pi.cpp | 12 ++++++------ 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/librecomp/include/librecomp/save.hpp b/librecomp/include/librecomp/save.hpp index e03f62f..1c3427c 100644 --- a/librecomp/include/librecomp/save.hpp +++ b/librecomp/include/librecomp/save.hpp @@ -3,10 +3,17 @@ #include +#include "ultramodern/ultra64.h" + namespace recomp { namespace save { - void init(uint8_t *rdram); + void init(RDRAM_ARG1); void join_thread(); + + void write_ptr(const void* in, uint32_t offset, uint32_t count); + void write(RDRAM_ARG PTR(void) rdram_address, uint32_t offset, uint32_t count); + void read(RDRAM_ARG PTR(void) rdram_address, uint32_t offset, uint32_t count); + void clear(uint32_t start, uint32_t size, char value); } } diff --git a/librecomp/src/flash.cpp b/librecomp/src/flash.cpp index 43407e8..440a9e7 100644 --- a/librecomp/src/flash.cpp +++ b/librecomp/src/flash.cpp @@ -1,8 +1,11 @@ #include #include -#include -#include + +#include "ultramodern/ultra64.h" +#include "ultramodern/ultramodern.hpp" + #include "recomp.h" +#include "librecomp/save.hpp" // TODO move this out into ultramodern code @@ -13,11 +16,6 @@ constexpr uint32_t page_count = flash_size / page_size; constexpr uint32_t sector_size = page_size * pages_per_sector; constexpr uint32_t sector_count = flash_size / sector_size; -void save_write_ptr(const void* in, uint32_t offset, uint32_t count); -void save_write(RDRAM_ARG PTR(void) rdram_address, uint32_t offset, uint32_t count); -void save_read(RDRAM_ARG PTR(void) rdram_address, uint32_t offset, uint32_t count); -void save_clear(uint32_t start, uint32_t size, char value); - std::array write_buffer; extern "C" void osFlashInit_recomp(uint8_t * rdram, recomp_context * ctx) { @@ -44,13 +42,13 @@ extern "C" void osFlashClearStatus_recomp(uint8_t * rdram, recomp_context * ctx) } extern "C" void osFlashAllErase_recomp(uint8_t * rdram, recomp_context * ctx) { - save_clear(0, ultramodern::save_size, 0xFF); + recomp::save::clear(0, ultramodern::save_size, 0xFF); ctx->r2 = 0; } extern "C" void osFlashAllEraseThrough_recomp(uint8_t * rdram, recomp_context * ctx) { - save_clear(0, ultramodern::save_size, 0xFF); + recomp::save::clear(0, ultramodern::save_size, 0xFF); ctx->r2 = 0; } @@ -65,7 +63,7 @@ extern "C" void osFlashSectorErase_recomp(uint8_t * rdram, recomp_context * ctx) return; } - save_clear(page_num * page_size, page_size, 0xFF); + recomp::save::clear(page_num * page_size, page_size, 0xFF); ctx->r2 = 0; } @@ -80,7 +78,7 @@ extern "C" void osFlashSectorEraseThrough_recomp(uint8_t * rdram, recomp_context return; } - save_clear(page_num * page_size, page_size, 0xFF); + recomp::save::clear(page_num * page_size, page_size, 0xFF); ctx->r2 = 0; } @@ -111,7 +109,7 @@ extern "C" void osFlashWriteArray_recomp(uint8_t * rdram, recomp_context * ctx) uint32_t page_num = ctx->r4; // Copy the write buffer into the save file - save_write_ptr(write_buffer.data(), page_num * page_size, page_size); + recomp::save::write_ptr(write_buffer.data(), page_num * page_size, page_size); ctx->r2 = 0; } @@ -128,7 +126,7 @@ extern "C" void osFlashReadArray_recomp(uint8_t * rdram, recomp_context * ctx) { uint32_t count = n_pages * page_size; // Read from the save file into the provided buffer - save_read(PASS_RDRAM dramAddr, offset, count); + recomp::save::read(PASS_RDRAM dramAddr, offset, count); // Send the message indicating read completion osSendMesg(PASS_RDRAM mq, 0, OS_MESG_NOBLOCK); diff --git a/librecomp/src/pi.cpp b/librecomp/src/pi.cpp index d527832..57df11d 100644 --- a/librecomp/src/pi.cpp +++ b/librecomp/src/pi.cpp @@ -151,7 +151,7 @@ void saving_thread_func(RDRAM_ARG1) { } } -void save_write_ptr(const void* in, uint32_t offset, uint32_t count) { +void recomp::save::write_ptr(const void* in, uint32_t offset, uint32_t count) { { std::lock_guard lock { save_context.save_buffer_mutex }; memcpy(&save_context.save_buffer[offset], in, count); @@ -160,7 +160,7 @@ void save_write_ptr(const void* in, uint32_t offset, uint32_t count) { save_context.write_sempahore.signal(); } -void save_write(RDRAM_ARG PTR(void) rdram_address, uint32_t offset, uint32_t count) { +void recomp::save::write(RDRAM_ARG PTR(void) rdram_address, uint32_t offset, uint32_t count) { { std::lock_guard lock { save_context.save_buffer_mutex }; for (uint32_t i = 0; i < count; i++) { @@ -171,14 +171,14 @@ void save_write(RDRAM_ARG PTR(void) rdram_address, uint32_t offset, uint32_t cou save_context.write_sempahore.signal(); } -void save_read(RDRAM_ARG PTR(void) rdram_address, uint32_t offset, uint32_t count) { +void recomp::save::read(RDRAM_ARG PTR(void) rdram_address, uint32_t offset, uint32_t count) { std::lock_guard lock { save_context.save_buffer_mutex }; for (size_t i = 0; i < count; i++) { MEM_B(i, rdram_address) = save_context.save_buffer[offset + i]; } } -void save_clear(uint32_t start, uint32_t size, char value) { +void recomp::save::clear(uint32_t start, uint32_t size, char value) { { std::lock_guard lock { save_context.save_buffer_mutex }; std::fill_n(save_context.save_buffer.begin() + start, size, value); @@ -224,7 +224,7 @@ void do_dma(RDRAM_ARG PTR(OSMesgQueue) mq, gpr rdram_address, uint32_t physical_ osSendMesg(rdram, mq, 0, OS_MESG_NOBLOCK); } else if (physical_addr >= sram_base) { // read sram - save_read(rdram, rdram_address, physical_addr - sram_base, size); + recomp::save::read(rdram, rdram_address, physical_addr - sram_base, size); // Send a message to the mq to indicate that the transfer completed osSendMesg(rdram, mq, 0, OS_MESG_NOBLOCK); @@ -237,7 +237,7 @@ void do_dma(RDRAM_ARG PTR(OSMesgQueue) mq, gpr rdram_address, uint32_t physical_ throw std::runtime_error("ROM DMA write unimplemented"); } else if (physical_addr >= sram_base) { // write sram - save_write(rdram, rdram_address, physical_addr - sram_base, size); + recomp::save::write(rdram, rdram_address, physical_addr - sram_base, size); // Send a message to the mq to indicate that the transfer completed osSendMesg(rdram, mq, 0, OS_MESG_NOBLOCK);