marioparty4/src/game/malloc.c
2025-04-02 10:19:16 +02:00

120 lines
2.3 KiB
C

#include "game/memory.h"
#include "game/init.h"
#include "dolphin/os.h"
static u32 HeapSizeTbl[HEAP_MAX] = { 0x240000, 0x140000, 0xA80000, 0x580000, 0 };
static void *HeapTbl[HEAP_MAX];
void HuMemInitAll(void)
{
s32 i;
void *ptr;
u32 free_size;
for(i=0; i<4; i++) {
ptr = OSAlloc(HeapSizeTbl[i]);
if(ptr == NULL) {
OSReport("HuMem> Failed OSAlloc Size:%d\n", HeapSizeTbl[i]);
return;
}
HeapTbl[i] = HuMemInit(ptr, HeapSizeTbl[i]);
}
free_size = OSCheckHeap(currentHeapHandle);
OSReport("HuMem> left memory space %dKB(%d)\n", free_size/1024, free_size);
ptr = OSAlloc(free_size);
if(ptr == NULL) {
OSReport("HuMem> Failed OSAlloc left space\n");
return;
}
HeapTbl[4] = HuMemInit(ptr, free_size);
HeapSizeTbl[4] = free_size;
}
void *HuMemInit(void *ptr, s32 size)
{
return HuMemHeapInit(ptr, size);
}
void HuMemDCFlushAll()
{
HuMemDCFlush(2);
HuMemDCFlush(0);
}
void HuMemDCFlush(HeapID heap)
{
DCFlushRangeNoSync(HeapTbl[heap], HeapSizeTbl[heap]);
}
void *HuMemDirectMalloc(HeapID heap, s32 size)
{
#ifdef TARGET_PC
u32 retaddr = 0;
#else
register u32 retaddr;
asm {
mflr retaddr
}
#endif
size = (size+31) & 0xFFFFFFE0;
return HuMemMemoryAlloc(HeapTbl[heap], size, retaddr);
}
void *HuMemDirectMallocNum(HeapID heap, s32 size, u32 num)
{
#ifdef TARGET_PC
u32 retaddr = 0;
#else
register u32 retaddr;
asm {
mflr retaddr
}
#endif
size = (size+31) & 0xFFFFFFE0;
return HuMemMemoryAllocNum(HeapTbl[heap], size, num, retaddr);
}
void HuMemDirectFree(void *ptr)
{
#ifdef TARGET_PC
u32 retaddr = 0;
#else
register u32 retaddr;
asm {
mflr retaddr
}
#endif
HuMemMemoryFree(ptr, retaddr);
}
void HuMemDirectFreeNum(HeapID heap, u32 num)
{
#ifdef TARGET_PC
u32 retaddr = 0;
#else
register u32 retaddr;
asm {
mflr retaddr
}
#endif
HuMemMemoryFreeNum(HeapTbl[heap], num, retaddr);
}
s32 HuMemUsedMallocSizeGet(HeapID heap)
{
return HuMemUsedMemorySizeGet(HeapTbl[heap]);
}
s32 HuMemUsedMallocBlockGet(HeapID heap)
{
return HuMemUsedMemoryBlockGet(HeapTbl[heap]);
}
u32 HuMemHeapSizeGet(HeapID heap)
{
return HeapSizeTbl[heap];
}
void *HuMemHeapPtrGet(HeapID heap)
{
return HeapTbl[heap];
}