summaryrefslogtreecommitdiff
path: root/include/memory.h
blob: ef99757be23518b265119bfb584b588ee3aefaa5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#ifndef GUARD_MEMORY_H
#define GUARD_MEMORY_H

#define HEAP_SIZE 0x24000

struct HeapSettings
{
    u8 *start;
    u32 size;
};

struct HeapMemoryBlock {
    u8 *start;
    s32 size;
    s32 allocatedSize;
};

struct HeapFreeListElement
{
    u32 unk_atb;
    u32 atb;
    u32 grp;
    struct HeapMemoryBlock block;
};

struct HeapDescriptor
{
    u32 unk0;
    struct HeapDescriptor *parentHeap;
    struct HeapFreeListElement *freeList;
    s32 freeCount;
    u32 freeListLength;
    u8 *start;
    u32 size;
};

void InitHeap(void);

void MemoryClear8(u8 *dest, s32 size);
void MemoryClear16(u16 *dest, s32 size);
void MemoryClear32(u32 *dest, s32 size);
void MemoryFill8(u8 *dest, u8 value, s32 size);
void MemoryFill16(u16 *dest, u16 value, s32 size);
void MemoryFill32(u32 *dest, u32 value, s32 size);
void MemoryCopy8(u8 *dest, u8 *src, s32 size);
void MemoryCopy16(u16 *dest, u16 *src, s32 size);
void MemoryCopy32(u32 *dest, u32 *src, s32 size);
void MemoryCopy8(u8 *dest, u8 *src, s32 size);
void MemoryCopy16(u16 *dest, u16 *src, s32 size);
void MemoryCopy32(u32 *dest, u32 *src, s32 size);

void InitHeapInternal(void);
void DoInitHeap(struct HeapDescriptor *, struct HeapSettings *, struct HeapFreeListElement *, u32);
void InitSubHeap(struct HeapDescriptor *, struct HeapMemoryBlock *, u32);
s32 _LocateSet(struct HeapDescriptor *heap, s32 size, s32 param_3);
void *MemoryAlloc(s32 size, s32 b);
void MemoryFree(void *a);

#endif // GUARD_MEMORY_H