diff --git a/config/eur/arm9/delinks.txt b/config/eur/arm9/delinks.txt index 3b906b159..d75f97c7c 100644 --- a/config/eur/arm9/delinks.txt +++ b/config/eur/arm9/delinks.txt @@ -83,3 +83,6 @@ src/Main/DTCM/UnkStruct_027e05f8_2.cpp: .init start:0x02050cb4 end:0x02050ce0 .ctor start:0x02057260 end:0x02057264 .dtcm start:0x027e05f8 end:0x027e060c + +libs/nds/src/heap.c: + .text start:0x02017034 end:0x02017530 \ No newline at end of file diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt index b5cfcfa72..bb2c3ba0c 100644 --- a/config/eur/arm9/symbols.txt +++ b/config/eur/arm9/symbols.txt @@ -677,22 +677,22 @@ func_02016efc kind:function(thumb,size=0xd0) addr:0x02016efc func_02016fcc kind:function(thumb,size=0x1a) addr:0x02016fcc func_02016fe8 kind:function(thumb,size=0x2e) addr:0x02016fe8 func_02017018 kind:function(thumb,size=0x1c) addr:0x02017018 -func_02017034 kind:function(thumb,size=0x1a) addr:0x02017034 -func_02017050 kind:function(thumb,size=0x1c) addr:0x02017050 -func_0201706c kind:function(thumb,size=0x20) addr:0x0201706c -func_0201708c kind:function(thumb,size=0x1a) addr:0x0201708c -func_020170a8 kind:function(thumb,size=0x50) addr:0x020170a8 -func_020170f8 kind:function(thumb,size=0x100) addr:0x020170f8 -func_020171f8 kind:function(thumb,size=0x7c) addr:0x020171f8 -func_02017274 kind:function(thumb,size=0x74) addr:0x02017274 -func_020172e8 kind:function(thumb,size=0x8c) addr:0x020172e8 -func_02017374 kind:function(thumb,size=0x20) addr:0x02017374 -func_02017394 kind:function(thumb,size=0x8) addr:0x02017394 -NewEXPH kind:function(thumb,size=0x20) addr:0x0201739c -func_020173bc kind:function(thumb,size=0xe8) addr:0x020173bc -func_020174a4 kind:function(thumb,size=0x2a) addr:0x020174a4 -func_020174d0 kind:function(thumb,size=0x16) addr:0x020174d0 -func_020174e8 kind:function(thumb,size=0x46) addr:0x020174e8 +Heap_GetRegion kind:function(thumb,size=0x1a) addr:0x02017034 +Heap_RemoveBlock kind:function(thumb,size=0x1c) addr:0x02017050 +Heap_InsertBlock kind:function(thumb,size=0x20) addr:0x0201706c +Heap_InitBlock kind:function(thumb,size=0x1a) addr:0x0201708c +Heap_EXPHInit kind:function(thumb,size=0x50) addr:0x020170a8 +Heap_AllocFreeBlock kind:function(thumb,size=0x100) addr:0x020170f8 +Heap_AllocHead kind:function(thumb,size=0x7c) addr:0x020171f8 +Heap_AllocTail kind:function(thumb,size=0x74) addr:0x02017274 +Heap_EmptyRegion kind:function(thumb,size=0x8c) addr:0x020172e8 +Heap_EXPHCreate kind:function(thumb,size=0x20) addr:0x02017374 +Heap_EXPHDestroy kind:function(thumb,size=0x8) addr:0x02017394 +Heap_EXPHNew kind:function(thumb,size=0x20) addr:0x0201739c +Heap_EXPHResizeBlock kind:function(thumb,size=0xe8) addr:0x020173bc +Heap_EXPHFreeBlock kind:function(thumb,size=0x2a) addr:0x020174a4 +Heap_EXPHGetEmptySize kind:function(thumb,size=0x16) addr:0x020174d0 +Heap_EXPHGetMaxEmptySize kind:function(thumb,size=0x46) addr:0x020174e8 func_02017530 kind:function(thumb,size=0x2c) addr:0x02017530 func_0201755c kind:function(thumb,size=0x3e) addr:0x0201755c func_0201759c kind:function(thumb,size=0x3c) addr:0x0201759c diff --git a/config/usa/arm9/delinks.txt b/config/usa/arm9/delinks.txt index 5f43dfcb4..c4600260e 100644 --- a/config/usa/arm9/delinks.txt +++ b/config/usa/arm9/delinks.txt @@ -79,3 +79,6 @@ src/Main/DTCM/UnkStruct_027e05f8_2.cpp: .init start:0x02050c70 end:0x02050c9c .ctor start:0x02057218 end:0x0205721c .dtcm start:0x027e05f8 end:0x027e060c + +libs/nds/src/heap.c: + .text start:0x02017034 end:0x02017530 \ No newline at end of file diff --git a/config/usa/arm9/symbols.txt b/config/usa/arm9/symbols.txt index f51170221..43c445e29 100644 --- a/config/usa/arm9/symbols.txt +++ b/config/usa/arm9/symbols.txt @@ -677,22 +677,22 @@ func_02016efc kind:function(thumb,size=0xd0) addr:0x02016efc func_02016fcc kind:function(thumb,size=0x1a) addr:0x02016fcc func_02016fe8 kind:function(thumb,size=0x2e) addr:0x02016fe8 func_02017018 kind:function(thumb,size=0x1c) addr:0x02017018 -func_02017034 kind:function(thumb,size=0x1a) addr:0x02017034 -func_02017050 kind:function(thumb,size=0x1c) addr:0x02017050 -func_0201706c kind:function(thumb,size=0x20) addr:0x0201706c -func_0201708c kind:function(thumb,size=0x1a) addr:0x0201708c -func_020170a8 kind:function(thumb,size=0x50) addr:0x020170a8 -func_020170f8 kind:function(thumb,size=0x100) addr:0x020170f8 -func_020171f8 kind:function(thumb,size=0x7c) addr:0x020171f8 -func_02017274 kind:function(thumb,size=0x74) addr:0x02017274 -func_020172e8 kind:function(thumb,size=0x8c) addr:0x020172e8 -func_02017374 kind:function(thumb,size=0x20) addr:0x02017374 -func_02017394 kind:function(thumb,size=0x8) addr:0x02017394 -NewEXPH kind:function(thumb,size=0x20) addr:0x0201739c -func_020173bc kind:function(thumb,size=0xe8) addr:0x020173bc -func_020174a4 kind:function(thumb,size=0x2a) addr:0x020174a4 -func_020174d0 kind:function(thumb,size=0x16) addr:0x020174d0 -func_020174e8 kind:function(thumb,size=0x46) addr:0x020174e8 +Heap_GetRegion kind:function(thumb,size=0x1a) addr:0x02017034 +Heap_RemoveBlock kind:function(thumb,size=0x1c) addr:0x02017050 +Heap_InsertBlock kind:function(thumb,size=0x20) addr:0x0201706c +Heap_InitBlock kind:function(thumb,size=0x1a) addr:0x0201708c +Heap_EXPHInit kind:function(thumb,size=0x50) addr:0x020170a8 +Heap_AllocFreeBlock kind:function(thumb,size=0x100) addr:0x020170f8 +Heap_AllocHead kind:function(thumb,size=0x7c) addr:0x020171f8 +Heap_AllocTail kind:function(thumb,size=0x74) addr:0x02017274 +Heap_EmptyRegion kind:function(thumb,size=0x8c) addr:0x020172e8 +Heap_EXPHCreate kind:function(thumb,size=0x20) addr:0x02017374 +Heap_EXPHDestroy kind:function(thumb,size=0x8) addr:0x02017394 +Heap_EXPHNew kind:function(thumb,size=0x20) addr:0x0201739c +Heap_EXPHResizeBlock kind:function(thumb,size=0xe8) addr:0x020173bc +Heap_EXPHFreeBlock kind:function(thumb,size=0x2a) addr:0x020174a4 +Heap_EXPHGetEmptySize kind:function(thumb,size=0x16) addr:0x020174d0 +Heap_EXPHGetMaxEmptySize kind:function(thumb,size=0x46) addr:0x020174e8 func_02017530 kind:function(thumb,size=0x2c) addr:0x02017530 func_0201755c kind:function(thumb,size=0x3e) addr:0x0201755c func_0201759c kind:function(thumb,size=0x3c) addr:0x0201759c diff --git a/libs/nds/include/nds/heap.h b/libs/nds/include/nds/heap.h new file mode 100644 index 000000000..e5bbcefb6 --- /dev/null +++ b/libs/nds/include/nds/heap.h @@ -0,0 +1,55 @@ +#include "global.h" +#include "types.h" + +typedef struct Heap_Region_ { + /* 00 */ void *start; + /* 04 */ void *end; + /* 08 */ +} Heap_Region; + +typedef struct Heap_LinkedObject_ { + /* 00 */ void *prev; + /* 04 */ void *next; + /* 08 */ +} Heap_LinkedObject; + +typedef struct Heap_LinkedList_ { + /* 00 */ void *head; + /* 04 */ void *tail; + /* 08 */ u16 numElements; + /* 0a */ u16 offset; + /* 0c */ +} Heap_LinkedList; + +typedef struct Heap_Header_ { + /* 00 */ u32 stamp; + /* 04 */ Heap_LinkedObject link; + /* 0c */ Heap_LinkedList children; + /* 18 */ void *startAddr; + /* 1c */ void *endAddr; + /* 20 */ u32 flags; + /* 24 */ +} Heap_Header; + +typedef struct Heap_EXPHBlockHeader_ { + /* 00 */ u16 stamp; + /* 02 */ u16 flags; + /* 04 */ u32 size; + /* 08 */ struct Heap_EXPHBlockHeader_ *prev; + /* 0c */ struct Heap_EXPHBlockHeader_ *next; + /* 20 */ +} Heap_EXPHBlockHeader; + +typedef struct Heap_EXPHBlockList_ { + /* 00 */ Heap_EXPHBlockHeader *head; + /* 04 */ Heap_EXPHBlockHeader *tail; + /* 08 */ +} Heap_EXPHBlockList; + +typedef struct Heap_EXPHHeader_ { + /* 00 */ Heap_EXPHBlockList freeBlocks; + /* 08 */ Heap_EXPHBlockList usedBlocks; + /* 10 */ u16 id; + /* 12 */ u16 flags; + /* 14 */ +} Heap_EXPHHeader; \ No newline at end of file diff --git a/libs/nds/src/heap.c b/libs/nds/src/heap.c new file mode 100644 index 000000000..3eafb0611 --- /dev/null +++ b/libs/nds/src/heap.c @@ -0,0 +1,394 @@ +#include "nds/heap.h" + +#define SetBit(data, st, bits, val) \ + { \ + u32 maskBits = ((1 << bits) - 1); \ + u32 newVal = val & maskBits; \ + maskBits <<= st; \ + data &= ~maskBits; \ + data |= newVal << st; \ + }; + +static inline u32 Diff_Ptr_inline(const void *start, const void *end) { + return end - start; +} + +static inline void *AddU32_inline(void *ptr, u32 val) { + return (void *) (val + (u32) ptr); +} + +static inline void Fill32_inline(Heap_Header *header, void *address, u32 size) { + if ((u16) (header->flags & 0xFF) & 1) { + Fill32(0, address, size); + } +} + +static inline Heap_EXPHHeader *GetEXPH_inline(Heap_Header *header) { + return (u32) header + sizeof(Heap_Header); +} + +THUMB void Heap_GetRegion(Heap_Region *region, Heap_EXPHBlockHeader *block) { + region->start = (u32) block - (u16) (block->flags >> 8 & 0x7F); + region->end = block->size + ((u32) block + sizeof(Heap_EXPHBlockHeader)); +} + +Heap_EXPHBlockHeader *Heap_RemoveBlock(Heap_EXPHBlockList *list, Heap_EXPHBlockHeader *block) { + Heap_EXPHBlockHeader *const p = block->prev; + Heap_EXPHBlockHeader *const n = block->next; + + if (p) { + p->next = n; + } else { + list->head = n; + } + + if (n) { + n->prev = p; + } else { + list->tail = p; + } + + return p; +} + +Heap_EXPHBlockHeader *Heap_InsertBlock(Heap_EXPHBlockList *list, Heap_EXPHBlockHeader *block, Heap_EXPHBlockHeader *prev) { + Heap_EXPHBlockHeader *next; + + block->prev = prev; + if (prev) { + next = prev->next; + prev->next = block; + } else { + next = list->head; + list->head = block; + } + + block->next = next; + if (next) { + next->prev = block; + } else { + list->tail = block; + } + + return block; +} + +Heap_EXPHBlockHeader *Heap_InitBlock(const Heap_Region *r, u16 stamp) { + Heap_EXPHBlockHeader *block = r->start; + block->stamp = stamp; + block->flags = 0; + block->size = r->end - ((u32) block + 0x10); + block->prev = NULL; + block->next = NULL; + return block; +} + +Heap_Header *Heap_EXPHInit(void *start, void *end, u16 flag) { + Heap_EXPHBlockHeader *emptyBlock; + Heap_Region region; + Heap_Header *header = start; + Heap_EXPHHeader *EXPHHeader = (void *) ((u32) header + sizeof(Heap_Header)); + + func_0201776c(header, 'EXPH', (void *) ((u32) EXPHHeader + sizeof(Heap_EXPHHeader)), end, flag); + + EXPHHeader->id = 0; + EXPHHeader->flags = 0; + SetBit(EXPHHeader->flags, 0, 1, 0); + + region.start = header->startAddr; + region.end = header->endAddr; + emptyBlock = Heap_InitBlock(®ion, 'FR'); + + EXPHHeader->freeBlocks.head = emptyBlock; + EXPHHeader->freeBlocks.tail = emptyBlock; + EXPHHeader->usedBlocks.head = NULL; + EXPHHeader->usedBlocks.tail = NULL; + + return header; +} + +void *Heap_AllocFreeBlock(Heap_EXPHHeader *EXPHHeader, Heap_EXPHBlockHeader *blockHeader, void *block, u32 size, + u16 direction) { + Heap_Region free1; + Heap_Region free2; + Heap_EXPHBlockHeader *prev; + Heap_EXPHBlockHeader *usedBlock; + Heap_Region r; + + Heap_GetRegion(&free1, blockHeader); + free2.end = free1.end; + free2.start = AddU32_inline(block, size); + free1.end = (u32) block - (u32) sizeof(Heap_EXPHBlockHeader); + prev = Heap_RemoveBlock(&EXPHHeader->freeBlocks, blockHeader); + + if (free1.end - free1.start < (u32) 0x14) { + free1.end = free1.start; + } else { + prev = Heap_InsertBlock(&EXPHHeader->freeBlocks, Heap_InitBlock(&free1, 'FR'), prev); + } + + if (free2.end - free2.start < (u32) 0x14) { + free2.start = free2.end; + } else { + Heap_InsertBlock(&EXPHHeader->freeBlocks, Heap_InitBlock(&free2, 'FR'), prev); + } + + Fill32_inline((u32) EXPHHeader - sizeof(Heap_Header), free1.end, free2.start - free1.end); + + r.start = (u32) block - (u32) sizeof(Heap_EXPHBlockHeader); + r.end = free2.start; + usedBlock = Heap_InitBlock(&r, 'UD'); + SetBit(usedBlock->flags, 15, 1, direction); + SetBit(usedBlock->flags, 8, 7, (u16) Diff_Ptr_inline(free1.end, usedBlock)); + SetBit(usedBlock->flags, 0, 8, EXPHHeader->id); + Heap_InsertBlock(&EXPHHeader->usedBlocks, usedBlock, EXPHHeader->usedBlocks.tail); + return block; +} + +void *Heap_AllocHead(Heap_Header *header, u32 size, int alignment) { + Heap_EXPHHeader *expHeader = GetEXPH_inline(header); + Heap_EXPHBlockHeader *blockHeader; + const u32 flag1 = (u16) (expHeader->flags & 1) == 0; + + Heap_EXPHBlockHeader *foundBlockHeader = NULL; + u32 foundSize = 0xffffffff; + void *foundBlock = NULL; + + for (blockHeader = expHeader->freeBlocks.head; blockHeader; blockHeader = blockHeader->next) { + void *const mblock = AddU32_inline(blockHeader, sizeof(Heap_EXPHBlockHeader)); + void *const reqBlock = ((alignment - 1) + (u32) mblock) & ~(alignment - 1); + const u32 offset = reqBlock - mblock; + + if (blockHeader->size >= size + offset && foundSize > blockHeader->size) { + foundBlockHeader = blockHeader; + foundSize = blockHeader->size; + foundBlock = reqBlock; + + if (flag1 || foundSize == size) { + break; + } + } + } + + if (!foundBlockHeader) { + return NULL; + } + + return Heap_AllocFreeBlock(expHeader, foundBlockHeader, foundBlock, size, 0); +} + +void *Heap_AllocTail(Heap_Header *header, u32 size, int alignment) { + Heap_EXPHHeader *expHeader = GetEXPH_inline(header); + Heap_EXPHBlockHeader *blockHeader; + + const u32 flag1 = (u16) (expHeader->flags & 1) == 0; + + Heap_EXPHBlockHeader *foundBlockHeader = NULL; + u32 foundSize = 0xffffffff; + void *foundBlock = NULL; + + for (blockHeader = expHeader->freeBlocks.tail; blockHeader; blockHeader = blockHeader->prev) { + void *const mblock = AddU32_inline(blockHeader, sizeof(Heap_EXPHBlockHeader)); + void *const mblockEnd = AddU32_inline(mblock, blockHeader->size); + void *const reqBlock = (u32) (mblockEnd - size) & ~(alignment - 1); + + if (reqBlock - mblock >= 0 && foundSize > blockHeader->size) { + foundBlockHeader = blockHeader; + foundSize = blockHeader->size; + foundBlock = reqBlock; + + if (flag1 || foundSize == size) { + break; + } + } + } + + if (!foundBlockHeader) { + return NULL; + } + + return Heap_AllocFreeBlock(expHeader, foundBlockHeader, foundBlock, size, 1); +} + +u32 Heap_EmptyRegion(Heap_EXPHHeader *expHeader, const Heap_Region *r) { + Heap_EXPHBlockHeader *freeBlockHeader = NULL; + Heap_Region freeRgn = *r; + Heap_EXPHBlockHeader *block; + + for (block = expHeader->freeBlocks.head; block; block = block->next) { + if (block < r->start) { + freeBlockHeader = block; + continue; + } + + if (block == r->end) { + freeRgn.end = AddU32_inline(AddU32_inline(block, sizeof(Heap_EXPHBlockHeader)), block->size); + Heap_RemoveBlock(&expHeader->freeBlocks, block); + } + break; + } + + if (freeBlockHeader && + AddU32_inline(AddU32_inline(freeBlockHeader, sizeof(Heap_EXPHBlockHeader)), freeBlockHeader->size) == r->start) { + freeRgn.start = freeBlockHeader; + freeBlockHeader = Heap_RemoveBlock(&expHeader->freeBlocks, freeBlockHeader); + } + + if (freeRgn.end - freeRgn.start < sizeof(Heap_EXPHBlockHeader)) { + return 0; + } + + Heap_InsertBlock(&expHeader->freeBlocks, Heap_InitBlock(&freeRgn, 'FR'), freeBlockHeader); + return 1; +} + +Heap_Header *Heap_EXPHCreate(void *startAddress, u32 size, u16 optFlag) { + void *endAddress; + Heap_Header *header; + endAddress = ((u32) AddU32_inline(startAddress, size)) & ~3; + startAddress = (u32) startAddress + 3 & ~3; + + if (startAddress > endAddress || endAddress - startAddress < (u32) 0x4c) { + return NULL; + } + + header = Heap_EXPHInit(startAddress, endAddress, optFlag); + return header; +} + +void Heap_EXPHDestroy(Heap_Header *heap) { + func_020177c8(heap); +} + +void *Heap_EXPHNew(Heap_Header *heap, u32 size, int alignment) { + void *h = NULL; + + if (size == 0) { + size = 1; + } + + size = (size + 3) & ~3; + + if (alignment >= 0) { + h = Heap_AllocHead(heap, size, alignment); + } else { + h = Heap_AllocTail(heap, size, -alignment); + } + + return h; +} + +u32 Heap_EXPHResizeBlock(Heap_Header *heap, void *memBlock, u32 size) { + Heap_EXPHHeader *expHeader; + Heap_EXPHBlockHeader *blockHeader; + + expHeader = AddU32_inline(heap, sizeof(Heap_Header)); + blockHeader = (u32) memBlock - sizeof(Heap_EXPHBlockHeader); + + size = (size + 3) & ~3; + if (size == blockHeader->size) { + return size; + } + + if (size > blockHeader->size) { + void *end = AddU32_inline(AddU32_inline(blockHeader, sizeof(Heap_EXPHBlockHeader)), blockHeader->size); + Heap_EXPHBlockHeader *block; + Heap_Region tmpRgn; + void *tmpStart; + Heap_EXPHBlockHeader *newPrev; + + for (block = expHeader->freeBlocks.head; block; block = block->next) { + if (block == end) { + break; + } + } + + if (!block || size > blockHeader->size + sizeof(Heap_EXPHBlockHeader) + block->size) { + return 0; + } + + Heap_GetRegion(&tmpRgn, block); + newPrev = Heap_RemoveBlock(&expHeader->freeBlocks, block); + + tmpStart = tmpRgn.start; + tmpRgn.start = AddU32_inline(memBlock, size); + + if (tmpRgn.end - tmpRgn.start < sizeof(Heap_EXPHBlockHeader)) { + tmpRgn.start = tmpRgn.end; + } + + blockHeader->size = tmpRgn.start - memBlock; + + if (tmpRgn.end - tmpRgn.start >= sizeof(Heap_EXPHBlockHeader)) { + Heap_InsertBlock(&expHeader->freeBlocks, Heap_InitBlock(&tmpRgn, 'FR'), newPrev); + } + + Fill32_inline(heap, tmpStart, tmpRgn.start - tmpStart); + + } else { + Heap_Region tmpRgn; + const u32 oldBlockSize = blockHeader->size; + + tmpRgn.start = AddU32_inline(memBlock, size); + tmpRgn.end = AddU32_inline(AddU32_inline(blockHeader, sizeof(Heap_EXPHBlockHeader)), blockHeader->size); + blockHeader->size = size; + + if (!Heap_EmptyRegion(expHeader, &tmpRgn)) { + blockHeader->size = oldBlockSize; + } + } + + return blockHeader->size; +} + +void Heap_EXPHFreeBlock(Heap_Header *heap, void *memBlock) { + Heap_Header *header = heap; + Heap_EXPHHeader *expHeader = AddU32_inline(header, sizeof(Heap_Header)); + Heap_EXPHBlockHeader *blockHeader = (Heap_EXPHBlockHeader *) (memBlock - sizeof(Heap_EXPHBlockHeader)); + Heap_Region region; + + Heap_GetRegion(®ion, blockHeader); + Heap_RemoveBlock(&expHeader->usedBlocks, blockHeader); + Heap_EmptyRegion(expHeader, ®ion); +} + +u32 Heap_EXPHGetEmptySize(Heap_Header *heap) { + u32 totalSize = 0; + Heap_EXPHBlockHeader *blockHeader; + Heap_EXPHHeader *expHeader = AddU32_inline(heap, sizeof(Heap_Header)); + + for (blockHeader = expHeader->freeBlocks.head; blockHeader; blockHeader = blockHeader->next) { + totalSize += blockHeader->size; + } + + return totalSize; +} + +u32 Heap_EXPHGetMaxEmptySize(Heap_Header *heap, int alignment) { + + alignment = abs(alignment); + + { + Heap_EXPHHeader *expHeader = AddU32_inline(heap, sizeof(Heap_Header)); + u32 maxSize = 0; + u32 offsetMin = 0xFFFFFFFF; + Heap_EXPHBlockHeader *blockHeader; + + for (blockHeader = expHeader->freeBlocks.head; blockHeader; blockHeader = blockHeader->next) { + void *baseAddress = + ((u32) AddU32_inline(blockHeader, sizeof(Heap_EXPHBlockHeader)) + (alignment - 1)) & ~(alignment - 1); + + if (baseAddress < AddU32_inline(AddU32_inline(blockHeader, sizeof(Heap_EXPHBlockHeader)), blockHeader->size)) { + const u32 blockSize = + AddU32_inline(AddU32_inline(blockHeader, sizeof(Heap_EXPHBlockHeader)), blockHeader->size) - baseAddress; + const u32 offset = baseAddress - AddU32_inline(blockHeader, sizeof(Heap_EXPHBlockHeader)); + + if (maxSize < blockSize || (maxSize == blockSize && offsetMin > offset)) { + maxSize = blockSize; + offsetMin = offset; + } + } + } + return maxSize; + } +} \ No newline at end of file diff --git a/src/04_Load/Actor/ActorManager_04.cpp b/src/04_Load/Actor/ActorManager_04.cpp index 84a1f9702..fdf8fe763 100644 --- a/src/04_Load/Actor/ActorManager_04.cpp +++ b/src/04_Load/Actor/ActorManager_04.cpp @@ -129,7 +129,7 @@ THUMB void ActorManager::func_ov004_0210532c() { return; } -extern "C" void func_020174a4(u32 *, void *); +extern "C" void Heap_EXPHFreeBlock(u32 *, void *); extern "C" void func_ov017_02168a90(); extern "C" void func_ov025_0216d6dc(); extern "C" void func_ov029_0216d6f0(unk32 *); @@ -147,7 +147,7 @@ THUMB void ActorManager::func_ov004_021053dc() { this->DeleteActor(i, true); } } - func_020174a4(data_027e0ce0[1], this->mActorTable); + Heap_EXPHFreeBlock(data_027e0ce0[1], this->mActorTable); this->mActorTable = NULL; delete this->mUnk_14; this->mUnk_14 = NULL; @@ -179,7 +179,7 @@ THUMB void ActorManager::func_ov004_021053dc() { } extern "C" void func_ov000_020c3388(unk32); -extern "C" void *NewEXPH(u32 *id, s32 length, s32 param_3); +extern "C" void *Heap_EXPHNew(u32 *id, s32 length, s32 param_3); THUMB void ActorManager::func_ov004_021054a4(FileEntryFlag *param1, s32 param2, unk32 param3) { u16 sVar1; u16 sVar2; @@ -205,7 +205,7 @@ THUMB void ActorManager::func_ov004_021054a4(FileEntryFlag *param1, s32 param2, } param1->vfunc_0c(); func_ov000_020c3388(sVar2); - this->mActorTable = (Actor **) NewEXPH(data_027e0ce0[1], this->mMaxActors * 4, 4); + this->mActorTable = (Actor **) Heap_EXPHNew(data_027e0ce0[1], this->mMaxActors * 4, 4); Fill256(0, this->mActorTable, this->mMaxActors * 4); this->mUnk_14 = new(data_027e0ce0[1], 4) ActorManager_Unk14(this->mMaxActors); } diff --git a/src/08_GameStart/Init.cpp b/src/08_GameStart/Init.cpp index 0481ca38f..3251c45b5 100644 --- a/src/08_GameStart/Init.cpp +++ b/src/08_GameStart/Init.cpp @@ -22,9 +22,9 @@ void func_0200a318(u8 *); unk32 func_0200dd94(); unk32 func_0200a284(u8 *); u16 func_ov001_020efdac(); -void *NewEXPH(char *id, s32 length, s32 param_3); +void *Heap_EXPHNew(char *id, s32 length, s32 param_3); unk32 func_ov000_020773c0(); -void func_020174a4(u32 *, void *); +void Heap_EXPHFreeBlock(u32 *, void *); void func_0201f378(); void func_0202019c(void *, const char *, u32 *, unk32); void func_020213f0(u32 *); @@ -165,13 +165,13 @@ ARM UnkStruct_020ee698::UnkStruct_020ee698() : mUnk_02(0), mUnk_04(func_ov001_020efdac()), mUnk_08(0x0D) { - void *newHeap = NewEXPH((char *) data_027e0ce0[1], 0x700, 0x20); + void *newHeap = Heap_EXPHNew((char *) data_027e0ce0[1], 0x700, 0x20); if (func_ov000_020773c0() == 3) { this->mUnk_00 = 1; } - func_020174a4(data_027e0ce0[1], newHeap); + Heap_EXPHFreeBlock(data_027e0ce0[1], newHeap); } // --- data_ov000_020ee734 ---