summaryrefslogtreecommitdiff
path: root/src/boot_O2
diff options
context:
space:
mode:
authorAnghelo Carvajal <angheloalf95@gmail.com>2021-08-18 08:48:08 -0400
committerGitHub <noreply@github.com>2021-08-18 08:48:08 -0400
commit49922b4856655a48389dbc45138930650e252dea (patch)
tree868e4c705a23808e7af2e34f2ed02318d0ffde2f /src/boot_O2
parent9eb438860cf1bcfe3ee31b1f50c43114606d4f79 (diff)
`system_malloc` OK (#261)
* move system_malloc to boot_O2 * Rename StartHeap into SystemArena * match * fake system_malloc data * fix return types * Rename Alloc to Malloc * Update tools/disasm/files.txt Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> * fix spec Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com>
Diffstat (limited to 'src/boot_O2')
-rw-r--r--src/boot_O2/boot_800862E0.c6
-rw-r--r--src/boot_O2/loadfragment2.c2
-rw-r--r--src/boot_O2/system_malloc.c67
3 files changed, 52 insertions, 23 deletions
diff --git a/src/boot_O2/boot_800862E0.c b/src/boot_O2/boot_800862E0.c
index d02fd15be..ecba8c5f5 100644
--- a/src/boot_O2/boot_800862E0.c
+++ b/src/boot_O2/boot_800862E0.c
@@ -1,8 +1,8 @@
#include "global.h"
-#pragma GLOBAL_ASM("asm/non_matchings/boot/boot_800862E0/StartHeap_AllocMin1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/boot/boot_800862E0/SystemArena_MallocMin1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/boot/boot_800862E0/StartHeap_FreeNull.s")
+#pragma GLOBAL_ASM("asm/non_matchings/boot/boot_800862E0/SystemArena_FreeNull.s")
#pragma GLOBAL_ASM("asm/non_matchings/boot/boot_800862E0/func_8008633C.s")
@@ -14,4 +14,4 @@
#pragma GLOBAL_ASM("asm/non_matchings/boot/boot_800862E0/func_80086588.s")
-#pragma GLOBAL_ASM("asm/non_matchings/boot/boot_800862E0/StartHeap_Init.s")
+#pragma GLOBAL_ASM("asm/non_matchings/boot/boot_800862E0/SystemArena_Init.s")
diff --git a/src/boot_O2/loadfragment2.c b/src/boot_O2/loadfragment2.c
index 69ec9615e..b9ea4533d 100644
--- a/src/boot_O2/loadfragment2.c
+++ b/src/boot_O2/loadfragment2.c
@@ -111,7 +111,7 @@ void* Load2_AllocateAndLoad(u32 vRomStart, u32 vRomEnd, u32 vRamStart, u32 vRamE
u32 size;
size = vRamEnd - vRamStart;
- allocatedVRamAddr = StartHeap_AllocR(size);
+ allocatedVRamAddr = SystemArena_MallocR(size);
if (allocatedVRamAddr != NULL) {
Load2_LoadOverlay(vRomStart, vRomEnd, vRamStart, vRamEnd, (u32)allocatedVRamAddr);
}
diff --git a/src/boot_O2/system_malloc.c b/src/boot_O2/system_malloc.c
index ee8fcd709..61906ce42 100644
--- a/src/boot_O2/system_malloc.c
+++ b/src/boot_O2/system_malloc.c
@@ -1,21 +1,50 @@
#include "global.h"
-#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_Alloc.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_AllocR.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_Realloc.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_Free.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_Calloc.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_AnalyzeArena.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_CheckArena.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_InitArena.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_Cleanup.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_IsInitialized.s")
+Arena gSystemArena;
+
+void* SystemArena_Malloc(u32 size) {
+ return __osMalloc(&gSystemArena, size);
+}
+
+void* SystemArena_MallocR(u32 size) {
+ return __osMallocR(&gSystemArena, size);
+}
+
+void* SystemArena_Realloc(void* oldPtr, u32 newSize) {
+ return __osRealloc(&gSystemArena, oldPtr, newSize);
+}
+
+void SystemArena_Free(void* ptr) {
+ __osFree(&gSystemArena, ptr);
+}
+
+void* SystemArena_Calloc(u32 elements, u32 size) {
+ void* ptr;
+ u32 totalSize = elements * size;
+
+ ptr = __osMalloc(&gSystemArena, totalSize);
+ if (ptr != NULL) {
+ bzero(ptr, totalSize);
+ }
+ return ptr;
+}
+
+void SystemArena_AnalyzeArena(u32* maxFreeBlock, u32* bytesFree, u32* bytesAllocated) {
+ __osAnalyzeArena(&gSystemArena, maxFreeBlock, bytesFree, bytesAllocated);
+}
+
+u32 SystemArena_CheckArena(void) {
+ return __osCheckArena(&gSystemArena);
+}
+
+void SystemArena_InitArena(void* start, u32 size) {
+ __osMallocInit(&gSystemArena, start, size);
+}
+
+void SystemArena_Cleanup(void) {
+ __osMallocCleanup(&gSystemArena);
+}
+
+u8 SystemArena_IsInitialized(void) {
+ return __osMallocIsInitalized(&gSystemArena);
+}