summaryrefslogtreecommitdiff
path: root/src/code/code_800FC620.c
diff options
context:
space:
mode:
authorcadmic <cadmic24@gmail.com>2024-09-04 02:10:14 -0700
committerGitHub <noreply@github.com>2024-09-04 11:10:14 +0200
commitc6d7cc7697c67989b1f018ae2bc934f6677c09b7 (patch)
treecadb909a8c2adde978320b8505fc1bda48e3342c /src/code/code_800FC620.c
parentaf24970d8919e4e6bb8356fd5672c938582dfcb8 (diff)
[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
Diffstat (limited to 'src/code/code_800FC620.c')
-rw-r--r--src/code/code_800FC620.c65
1 files changed, 49 insertions, 16 deletions
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();
}