From c6d7cc7697c67989b1f018ae2bc934f6677c09b7 Mon Sep 17 00:00:00 2001 From: cadmic Date: Wed, 4 Sep 2024 02:10:14 -0700 Subject: [ntsc-1.2] Match __osMalloc.c and code_800FC620.c (new/delete) (#2106) * Match __osMalloc * Match src/code/code_800FC620.c (new/delete) * Wrap versions-specific files in ifdefs to fix compilation * Fix bss * Remove {FAULT,RAND,OSMALLOC}_VERSION in favor of PLATFORM_N64 * Fix __osMalloc data splits, add unused strings * __osMalloc.h -> osMalloc.h * Fix merge --- src/code/code_800FC620.c | 65 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 49 insertions(+), 16 deletions(-) (limited to 'src/code/code_800FC620.c') diff --git a/src/code/code_800FC620.c b/src/code/code_800FC620.c index eafbe5080..4d7b7b4ef 100644 --- a/src/code/code_800FC620.c +++ b/src/code/code_800FC620.c @@ -1,4 +1,5 @@ #include "global.h" +#include "osMalloc.h" typedef void (*arg3_800FC868)(void*); typedef void (*arg3_800FC8D8)(void*, u32); @@ -26,43 +27,64 @@ char D_80134488[0x18] = { // possibly some kind of new() function void* func_800FC800(u32 size) { + DECLARE_INTERRUPT_MASK + void* ptr; + + DISABLE_INTERRUPTS(); + if (size == 0) { size = 1; } #if OOT_DEBUG - return __osMallocDebug(&gSystemArena, size, sNew, 0); + ptr = __osMallocDebug(&gSystemArena, size, sNew, 0); #else - return __osMalloc(&gSystemArena, size); + ptr = __osMalloc(&gSystemArena, size); #endif + + RESTORE_INTERRUPTS(); + return ptr; } // possibly some kind of delete() function void func_800FC83C(void* ptr) { + DECLARE_INTERRUPT_MASK + + DISABLE_INTERRUPTS(); if (ptr != NULL) { __osFree(&gSystemArena, ptr); } + RESTORE_INTERRUPTS(); } void func_800FC868(void* blk, u32 nBlk, u32 blkSize, arg3_800FC868 arg3) { + DECLARE_INTERRUPT_MASK u32 pos; - for (pos = (u32)blk; pos < (u32)blk + (nBlk * blkSize); pos = (u32)pos + (blkSize & ~0)) { + DISABLE_INTERRUPTS(); + for (pos = ((u32)blk & ~0); pos < (u32)blk + (nBlk * blkSize); pos = (u32)pos + (blkSize & ~0)) { arg3((void*)pos); } + RESTORE_INTERRUPTS(); } void func_800FC8D8(void* blk, u32 nBlk, s32 blkSize, arg3_800FC8D8 arg3) { + DECLARE_INTERRUPT_MASK u32 pos; - for (pos = (u32)blk; pos < (u32)blk + (nBlk * blkSize); pos = (u32)pos + (blkSize & ~0)) { + DISABLE_INTERRUPTS(); + for (pos = ((u32)blk & ~0); pos < (u32)blk + (nBlk * blkSize); pos = (u32)pos + (blkSize & ~0)) { arg3((void*)pos, 2); } + RESTORE_INTERRUPTS(); } void* func_800FC948(void* blk, u32 nBlk, u32 blkSize, arg3_800FC948 arg3) { + DECLARE_INTERRUPT_MASK u32 pos; + DISABLE_INTERRUPTS(); + if (blk == NULL) { blk = func_800FC800(nBlk * blkSize); } @@ -74,29 +96,35 @@ void* func_800FC948(void* blk, u32 nBlk, u32 blkSize, arg3_800FC948 arg3) { pos = (u32)pos + (blkSize & ~0); } } + + RESTORE_INTERRUPTS(); return blk; } void func_800FCA18(void* blk, u32 nBlk, u32 blkSize, arg3_800FCA18 arg3, s32 arg4) { + DECLARE_INTERRUPT_MASK u32 pos; u32 end; - if (blk == NULL) { - return; - } - if (arg3 != NULL) { - end = (u32)blk; - pos = (u32)end + (nBlk * blkSize); + DISABLE_INTERRUPTS(); - while (pos > end) { - pos -= (s32)(blkSize & ~0); - arg3((void*)pos, 2); + if (blk != NULL) { + if (arg3 != NULL) { + end = (u32)blk; + pos = (u32)end + (nBlk * blkSize); + + while (pos > end) { + pos -= (s32)(blkSize & ~0); + arg3((void*)pos, 2); + } } - } - if (arg4 != 0) { - func_800FC83C(blk); + if (arg4 != 0) { + func_800FC83C(blk); + } } + + RESTORE_INTERRUPTS(); } void func_800FCB34(void) { @@ -120,6 +148,11 @@ void func_800FCB34(void) { } void SystemHeap_Init(void* start, u32 size) { +#if PLATFORM_N64 + __osMallocInit(&gSystemArena, start, size); +#else SystemArena_Init(start, size); +#endif + func_800FCB34(); } -- cgit v1.2.3