From 9f61df48b15d8a2ada9a941fa58bdd8c04b3298b Mon Sep 17 00:00:00 2001 From: Ethan Roseman Date: Thu, 10 Dec 2020 22:24:28 +0900 Subject: [PATCH] non-matching nuAuCleanDMABuffers --- src/code_25f00_len_940.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/code_25f00_len_940.c b/src/code_25f00_len_940.c index c0192200f4..cef286d1a7 100644 --- a/src/code_25f00_len_940.c +++ b/src/code_25f00_len_940.c @@ -30,7 +30,43 @@ ALDMAproc nuAuDmaNew(NUDMAState **state) { return nuAuDmaCallBack; } +// Some weird symbol loading shenanigans (addiu vs lw) +#ifdef NON_MATCHING +void nuAuCleanDMABuffers(void) { + NUDMABuffer* dmaPtr = nuAuDmaState.firstUsed; + NUDMABuffer* nextPtr; + + while (dmaPtr != NULL) { + nextPtr = dmaPtr->node.next; + if (&nuAuDmaState) { + + } + + if (dmaPtr->frameCnt + 1 < nuAuFrameCounter) { + if (nuAuDmaState.firstUsed == dmaPtr) { + nuAuDmaState.firstUsed = nextPtr; + } + + alUnlink(dmaPtr); + + if (nuAuDmaState.firstFree != NULL) { + alLink(dmaPtr, nuAuDmaState.firstFree); + } else { + nuAuDmaState.firstFree = dmaPtr; + dmaPtr->node.next = NULL; + dmaPtr->node.prev = NULL; + } + } + + dmaPtr = nextPtr; + } + + nuAuDmaNext = 0; + nuAuFrameCounter += 1; +} +#else INCLUDE_ASM(void, "code_25f00_len_940", nuAuCleanDMABuffers); +#endif INCLUDE_ASM(s32, "code_25f00_len_940", func_8004B328);