diff options
| author | Anghelo Carvajal <angheloalf95@gmail.com> | 2021-08-18 08:48:08 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-18 08:48:08 -0400 |
| commit | 49922b4856655a48389dbc45138930650e252dea (patch) | |
| tree | 868e4c705a23808e7af2e34f2ed02318d0ffde2f /src/boot_O2 | |
| parent | 9eb438860cf1bcfe3ee31b1f50c43114606d4f79 (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.c | 6 | ||||
| -rw-r--r-- | src/boot_O2/loadfragment2.c | 2 | ||||
| -rw-r--r-- | src/boot_O2/system_malloc.c | 67 |
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); +} |
