From 33cc13b68725a2369dd75f18964cc3657ccfba40 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 21 Nov 2023 21:06:39 -0600 Subject: [PATCH] Fully match malloc.c --- config/GMPE01_00/symbols.txt | 2 +- configure.py | 3 +- include/functions.h | 6 ++++ src/game/malloc.c | 53 ++++++++++++++++++++++++++++++++++-- 4 files changed, 60 insertions(+), 4 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index d2905542..b41ce435 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -5952,7 +5952,7 @@ lbl_801D3B0C = .sbss:0x801D3B0C; // type:object size:0x4 data:4byte lbl_801D3B10 = .sbss:0x801D3B10; // type:object size:0x4 data:4byte lbl_801D3B14 = .sbss:0x801D3B14; // type:object size:0x4 data:4byte lbl_801D3B18 = .sbss:0x801D3B18; // type:object size:0x4 data:4byte -lbl_801D3B1C = .sbss:0x801D3B1C; // type:object size:0x4 data:4byte +currentHeapHandle = .sbss:0x801D3B1C; // type:object size:0x4 data:4byte lbl_801D3B20 = .sbss:0x801D3B20; // type:object size:0x8 data:4byte lbl_801D3B28 = .sbss:0x801D3B28; // type:object size:0x4 data:4byte lbl_801D3B2C = .sbss:0x801D3B2C; // type:object size:0x2 data:2byte diff --git a/configure.py b/configure.py index 743ffead..e0899cf8 100755 --- a/configure.py +++ b/configure.py @@ -222,7 +222,8 @@ config.libs = [ "cflags": cflags_game, "host": False, "objects": [ - Object(NonMatching, "game/malloc.c"), + Object(Matching, "game/malloc.c"), + Object(NonMatching, "game/memory.c"), ], }, { diff --git a/include/functions.h b/include/functions.h index e5091dc7..4ccdb727 100644 --- a/include/functions.h +++ b/include/functions.h @@ -28,5 +28,11 @@ void HuMemDCFlush(int heap); void *HuMemHeapInit(void *ptr, u32 size); void *HuMemMemoryAlloc(void *heap_ptr, u32 size, void *retaddr); +void *HuMemMemoryAllocNum(void *heap_ptr, u32 size, u32 num, void *retaddr); +void HuMemMemoryFree(void *ptr, void *retaddr); +void HuMemMemoryFreeNum(void *heap_ptr, u32 num, void *retaddr); +u32 HuMemUsedMemorySizeGet(void *heap_ptr); +u32 HuMemUsedMemoryBlockGet(void *heap_ptr); + #endif \ No newline at end of file diff --git a/src/game/malloc.c b/src/game/malloc.c index a66f325b..b3572691 100644 --- a/src/game/malloc.c +++ b/src/game/malloc.c @@ -1,8 +1,9 @@ #include "common.h" extern int __OSCurrHeap; +extern int currentHeapHandle; -static u32 HeapSizeTbl[5] = { 0x240000, 0x140000, 0xA80000, 0x580000, 0x6B1C0 }; +static u32 HeapSizeTbl[5] = { 0x240000, 0x140000, 0xA80000, 0x580000, 0 }; static void *HeapTbl[5]; void HuMemInitAll(void) @@ -18,7 +19,7 @@ void HuMemInitAll(void) } HeapTbl[i] = HuMemInit(ptr, HeapSizeTbl[i]); } - free_size = OSCheckHeap(__OSCurrHeap); + free_size = OSCheckHeap(currentHeapHandle); OSReport("HuMem> left memory space %dKB(%d)\n", free_size/1024, free_size); ptr = OSAllocFromHeap(__OSCurrHeap, free_size); if(ptr == NULL) { @@ -55,3 +56,51 @@ void *HuMemDirectMalloc(int heap, u32 size) size = (size+31) & 0xFFFFFFE0; return HuMemMemoryAlloc(HeapTbl[heap], size, retaddr); } + +void *HuMemDirectMallocNum(int heap, u32 size, u32 num) +{ + register void *retaddr; + asm { + mflr retaddr + } + size = (size+31) & 0xFFFFFFE0; + return HuMemMemoryAllocNum(HeapTbl[heap], size, num, retaddr); +} + +void HuMemDirectFree(void *ptr) +{ + register void *retaddr; + asm { + mflr retaddr + } + HuMemMemoryFree(ptr, retaddr); +} + +void HuMemDirectFreeNum(int heap, u32 num) +{ + register void *retaddr; + asm { + mflr retaddr + } + HuMemMemoryFreeNum(HeapTbl[heap], num, retaddr); +} + +u32 HuMemUsedMallocSizeGet(int heap) +{ + return HuMemUsedMemorySizeGet(HeapTbl[heap]); +} + +u32 HuMemUsedMallocBlockGet(int heap) +{ + return HuMemUsedMemoryBlockGet(HeapTbl[heap]); +} + +u32 HuMemHeapSizeGet(int heap) +{ + return HeapSizeTbl[heap]; +} + +void *HuMemHeapPtrGet(int heap) +{ + return HeapTbl[heap]; +} \ No newline at end of file