diff options
Diffstat (limited to 'src/memory.c')
-rw-r--r-- | src/memory.c | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/src/memory.c b/src/memory.c new file mode 100644 index 0000000..1cf31f5 --- /dev/null +++ b/src/memory.c @@ -0,0 +1,118 @@ + +// Includes +#include "global.h" +#include "code_800B540.h" + +// Static type declarations + +struct HeapInitArgs { + void *ptr; + u32 size; +}; + +// Static RAM declarations + +u32 gUnknown_2000EA8 = 0; +u8 gUnknown_2000EB0[0x20] = {}; +u8 gUnknown_2000ED0[0x300] = {}; +u8 gUnknown_20011D0[0x24000] = {}; + +// Static ROM declarations + +// .rodata + +// .text + +void InitHeapInternal(void); +void DoInitHeap(void *a0, struct HeapInitArgs *args, void *a2, size_t a3); + +void InitHeap(void) +{ + InitHeapInternal(); +} + +void MemoryClear8(u8 *dst, int size) +{ + while (size > 0) + { + size -= 1; + *dst++ = 0; + } +} + +void MemoryClear16(u16 *dst, int size) +{ + while (size > 0) + { + size -= 2; + *dst++ = 0; + } +} + +void MemoryClear32(u32 *dst, int size) +{ + CpuClear(dst, size); +} + +void MemoryFill8(u8 *dst, u8 val, int size) +{ + while (size > 0) + { + size -= 1; + *dst++ = val; + } +} + +void MemoryFill16(u16 *dst, u16 val, int size) +{ + while (size > 0) + { + size -= 2; + *dst++ = val; + } +} + +void MemoryFill32(u32 *dst, u32 val, int size) +{ + while (size > 0) + { + size -= 4; + *dst++ = val; + } +} + +void MemoryCopy8(u8 *dst, const u8 *src, int size) +{ + while (size > 0) + { + size -= 1; + *dst++ = *src++; + } +} + +void MemoryCopy16(u16 *dst, const u16 *src, int size) +{ + while (size > 0) + { + size -= 2; + *dst++ = *src++; + } +} + +void MemoryCopy32(u32 *dst, const u32 *src, int size) +{ + while (size > 0) + { + size -= 4; + *dst++ = *src++; + } +} + +void InitHeapInternal(void) +{ + struct HeapInitArgs args; + args.ptr = gUnknown_20011D0; + args.size = sizeof gUnknown_20011D0; + gUnknown_2000EA8 = 0; + DoInitHeap(gUnknown_2000EB0, &args, gUnknown_2000ED0, sizeof gUnknown_2000EB0); +} |