From f52d20844a72170e7a72bb9690c3b185fcf35d10 Mon Sep 17 00:00:00 2001 From: gijs Date: Fri, 20 Oct 2023 18:32:08 +0200 Subject: [PATCH] Rename `romCopy_512` to `nuPiReadRom` --- include/common.h | 1 - include/nu/nusys.h | 4 +-- linker_scripts/symbols/addr.txt | 2 +- src/_ob_icy_coast.c | 46 +++++++++++++++-------------- src/_ob_prized_room.c | 6 ++-- src/segment_song/_ob_knotty_chess.c | 8 +++-- 6 files changed, 36 insertions(+), 31 deletions(-) diff --git a/include/common.h b/include/common.h index e10eca0..60f87db 100644 --- a/include/common.h +++ b/include/common.h @@ -165,7 +165,6 @@ extern s8 D_800E918D; extern void romCopy(u32 devAddr, void* dramAddr, u32 size, s32 direction); -extern void romCopy_512(void* src, void* dst, u32 len); extern void __calls_romCopy_8009DA50(void* src, void* dst, u32 len); extern void __calls_osViBlack(bool black); diff --git a/include/nu/nusys.h b/include/nu/nusys.h index f9a748d..8e546d8 100644 --- a/include/nu/nusys.h +++ b/include/nu/nusys.h @@ -892,10 +892,10 @@ extern s32 nuEepromWrite(u8 address, u8* buffer,u16 len); /* pi functions */ /*--------------------------------------*/ extern void nuPiInit(void); -extern void nuPiReadRom(u32 rom_addr, void* buf_ptr, u32 size); +extern void nuPiReadRom(void* src, void* dst, u32 size); extern void nuPiInitSram(void); extern void nuPiInitDDrom(void); -extern void nuPiReadWriteSram(u32 addr, void* buf_ptr, u32 size, s32 flag); +extern void nuPiReadWriteSram(u32 src, void* dst, u32 size, s32 flag); extern void nuPiReadRomOverlay(NUPiOverlaySegment* segment); /*--------------------------------------*/ diff --git a/linker_scripts/symbols/addr.txt b/linker_scripts/symbols/addr.txt index e4d1ecb..7ccc4de 100644 --- a/linker_scripts/symbols/addr.txt +++ b/linker_scripts/symbols/addr.txt @@ -64,6 +64,7 @@ nuSiSendMesg = 0x80089CF8; nuSiMgrStop = 0x80089D5C; nuSiMgrRestart = 0x80089D7C; nuIdle = 0x8007F8E4; +nuPiReadRom = 0x80089F80; obCurrentTime = 0x800C47D0; @@ -975,7 +976,6 @@ carthandle = 0x800E79AC; __ROM_0_to_8000 = 0x800A83B8; // rom:0x387B8 romCopy_256 = 0x80074CF0; // rom:0x50F0 -romCopy_512 = 0x80089F80; __GLOBAL_CONTROLLER_DATA = 0x0800C4BF0; // size:0x18 __GLOBAL_CONTROLLER_DATA_COPY = 0x0800AEE78; // size:0x18 diff --git a/src/_ob_icy_coast.c b/src/_ob_icy_coast.c index 6793314..804ced8 100644 --- a/src/_ob_icy_coast.c +++ b/src/_ob_icy_coast.c @@ -1,6 +1,7 @@ #include "common.h" #include "nu/nusys.h" +#include "os_pi.h" void nuSiMgrThread(void* arg); @@ -52,33 +53,34 @@ void nuPiInit(void) { } /* 1A380 80089F80 */ -void romCopy_512(void *src, void *dst, u32 len) { - OSIoMesg dmaIoMesgBuf; +void nuPiReadRom(void *src, void *dst, u32 size) { + OSIoMesg ioMesg; + OSMesg mesg; + OSMesgQueue queue; + u32 mesgSize; - OSMesgQueue dmaMessageQ; - OSMesg dummyMesg; - u32 readlength; - - osCreateMesgQueue(&dmaMessageQ, &dummyMesg, 1); - dmaIoMesgBuf.hdr.pri = 0; - dmaIoMesgBuf.hdr.retQueue = &dmaMessageQ; - osInvalDCache(dst, len); - while (len != 0) { - readlength = len; - if (readlength > MAX_BYTES_TO_READ) { - readlength = MAX_BYTES_TO_READ; + osCreateMesgQueue(&queue, &mesg, 1); + + ioMesg.hdr.pri = 0; + ioMesg.hdr.retQueue = &queue; + osInvalDCache(dst, size); + while (size != 0) { + mesgSize = size; + if (mesgSize > MAX_BYTES_TO_READ) { + mesgSize = MAX_BYTES_TO_READ; } - dmaIoMesgBuf.devAddr = (u32)src; - dmaIoMesgBuf.dramAddr = dst; - dmaIoMesgBuf.size = readlength; + ioMesg.devAddr = (u32)src; + ioMesg.dramAddr = dst; + ioMesg.size = mesgSize; // Start the DMA transfer - osEPiStartDma(PTR_CART_ROM_HANDLE, &dmaIoMesgBuf, 0); + osEPiStartDma(PTR_CART_ROM_HANDLE, &ioMesg, OS_READ); // Wait for the DMA transfer to complete - osRecvMesg(&dmaMessageQ, &dummyMesg, 1); - src += readlength; - dst += readlength; - len -= readlength; + osRecvMesg(&queue, &mesg, OS_MESG_BLOCK); + + src += mesgSize; + dst += mesgSize; + size -= mesgSize; } } diff --git a/src/_ob_prized_room.c b/src/_ob_prized_room.c index db94f86..6cbfad8 100644 --- a/src/_ob_prized_room.c +++ b/src/_ob_prized_room.c @@ -1,5 +1,7 @@ #include "common.h" +#include "nu/nusys.h" + INCLUDE_ASM(const s32, "_ob_prized_room", func_8009DA10); /* 2DE50 8009DA50 */ @@ -15,13 +17,13 @@ void __calls_romCopy_8009DA50(void* src, void* dst, u32 len) { if (len < 16) { _dst = dst; // Copy into stack, length aligned to 2 bytes... - romCopy_512(src, _src, (len + 1) & ~1); + nuPiReadRom(src, _src, (len + 1) & ~1); // ...then copy from stack into destination for(len--; len != -1; len--) *_dst++ = *_src++; } else { // Too big to fit in our stack, so just do a regular copy - romCopy_512(src, dst, (len + 1) & ~1); + nuPiReadRom(src, dst, (len + 1) & ~1); } } diff --git a/src/segment_song/_ob_knotty_chess.c b/src/segment_song/_ob_knotty_chess.c index 2f52541..fc6fca2 100644 --- a/src/segment_song/_ob_knotty_chess.c +++ b/src/segment_song/_ob_knotty_chess.c @@ -1,5 +1,7 @@ #include "common.h" +#include "nu/nusys.h" + void __load_song(void*); extern u8 D_8010A760[]; @@ -11,9 +13,9 @@ extern s32 D_800EB0E8; /* 3F1B0 800E9C20 */ void func_800E9C20(void) { - romCopy_512(SEGMENT_ROM_START(n64_ptr_tables_v2_00), D_80164770, SEGMENT_ROM_SIZE(n64_ptr_tables_v2_00)); - romCopy_512(SEGMENT_ROM_START(n64_ptr_tables_v2_01), D_80104710, SEGMENT_ROM_SIZE(n64_ptr_tables_v2_01)); - romCopy_512(SEGMENT_ROM_START(n64_wave_data), &D_8010A760, SEGMENT_ROM_SIZE(n64_wave_data)); + nuPiReadRom(SEGMENT_ROM_START(n64_ptr_tables_v2_00), D_80164770, SEGMENT_ROM_SIZE(n64_ptr_tables_v2_00)); + nuPiReadRom(SEGMENT_ROM_START(n64_ptr_tables_v2_01), D_80104710, SEGMENT_ROM_SIZE(n64_ptr_tables_v2_01)); + nuPiReadRom(SEGMENT_ROM_START(n64_wave_data), &D_8010A760, SEGMENT_ROM_SIZE(n64_wave_data)); MusPtrBankInitialize(D_80164770, SEGMENT_ROM_START(n64_wave_table_00)); MusPtrBankInitialize(D_80104710, SEGMENT_ROM_START(n64_wave_table_01));