diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/gba/defines.h | 4 | ||||
-rw-r--r-- | include/global.h | 14 | ||||
-rw-r--r-- | include/macros/m4a.inc | 13 | ||||
-rw-r--r-- | include/memory.h | 56 |
4 files changed, 74 insertions, 13 deletions
diff --git a/include/gba/defines.h b/include/gba/defines.h index 7fd429d..5f0123a 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -8,6 +8,8 @@ #define IWRAM_DATA __attribute__((section("iwram_data"))) #define EWRAM_DATA __attribute__((section("ewram_data"))) +#define UNUSED __attribute__((unused)) +#define NAKED __attribute__((naked)) #define ALIGNED(n) __attribute__((aligned(n))) @@ -59,4 +61,4 @@ #define WIN_RANGE(a, b) (((a) << 8) | (b)) -#endif // GUARD_GBA_DEFINES +#endif // GUARD_GBA_DEFINES
\ No newline at end of file diff --git a/include/global.h b/include/global.h index 75592d5..66c1b6d 100644 --- a/include/global.h +++ b/include/global.h @@ -1,10 +1,11 @@ #ifndef GUARD_GLOBAL_H #define GUARD_GLOBAL_H +#include <string.h> #include "gba/gba.h" // IDE support -#ifdef __APPLE__ +#if defined(__APPLE__) || defined(__CYGWIN__) #define _(x) x #define __(x) x #define INCBIN_U8 {0} @@ -13,9 +14,6 @@ #define INCBIN_S8 {0} #define INCBIN_S16 {0} #define INCBIN_S32 {0} -void * memcpy (void *, const void *, size_t); -void * memset (void *, int, size_t); -int strcmp (const char *, const char *); #endif // Prevent cross-jump optimization. @@ -26,14 +24,6 @@ int strcmp (const char *, const char *); #define asm_unified(x) asm(".syntax unified\n" x "\n.syntax divided\n") -#define nonmatching(fndec, x) {\ -__attribute__((naked))\ -fndec\ -{\ - asm_unified(x);\ -}\ -} - #define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0])) #endif // GUARD_GLOBAL_H diff --git a/include/macros/m4a.inc b/include/macros/m4a.inc new file mode 100644 index 0000000..6c5abc0 --- /dev/null +++ b/include/macros/m4a.inc @@ -0,0 +1,13 @@ + .macro song label, music_player, unknown + .4byte \label + .2byte \music_player + .2byte \unknown + .endm + + .macro music_player info_struct, track_struct, unknown_1, unknown_2 + .4byte \info_struct + .4byte \track_struct + .byte \unknown_1 + .space 1 + .2byte \unknown_2 + .endm diff --git a/include/memory.h b/include/memory.h new file mode 100644 index 0000000..4b1e587 --- /dev/null +++ b/include/memory.h @@ -0,0 +1,56 @@ +#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); + +#endif // GUARD_MEMORY_H |