summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-05-12 18:23:21 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2020-05-12 18:23:21 -0400
commit61a7e3213a21aba6e946a0b6d4bd907bbfb21dde (patch)
tree0bcf58ef2ee30121eae2b11c026b49ee6d968b4e
parent1f1436119c04f510975d3729458d9218340beb9d (diff)
Additional two funcs in FUN_020910A4
-rw-r--r--arm9/arm9.lcf1
-rw-r--r--arm9/asm/unk_0208AC14.s34
-rw-r--r--arm9/src/FUN_020910A4.c30
3 files changed, 27 insertions, 38 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf
index c0bda60d..940f9618 100644
--- a/arm9/arm9.lcf
+++ b/arm9/arm9.lcf
@@ -268,6 +268,7 @@ SECTIONS {
gUnknown21C48B8 = 0x021C48B8;
gUnk021C4918 = 0x021C4918;
gUnk021C8C70 = 0x021C8C70;
+ gUnk021C8C74 = 0x021C8C74;
OSi_IrqCallbackInfo = 0x021D341C;
isInitialized = 0x021D347C;
OSi_StackForDestructor = 0x021D3480;
diff --git a/arm9/asm/unk_0208AC14.s b/arm9/asm/unk_0208AC14.s
index 3c9e95d4..38ad538a 100644
--- a/arm9/asm/unk_0208AC14.s
+++ b/arm9/asm/unk_0208AC14.s
@@ -6894,37 +6894,3 @@ _02091030: .word 0x04000243
_02091034: .word FUN_02090BBC
_02091038: .word FUN_02090BB8
_0209103C: .word 0x021C8C68
-
- arm_func_start FUN_02091040
-FUN_02091040: ; 0x02091040
- ldr r3, _02091054 ; =0x021C8C70
- ldr r2, _02091058 ; =0x021C8C74
- str r0, [r3, #0x0]
- str r1, [r2, #0x0]
- bx lr
- .balign 4
-_02091054: .word 0x021C8C70
-_02091058: .word 0x021C8C74
-
- arm_func_start FUN_0209105C
-FUN_0209105C: ; 0x0209105C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020910A0 ; =0x021C8C74
- mov r2, r0
- ldr r1, [r1, #0x0]
- cmp r1, #0x0
- beq _02091088
- blx r1
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-_02091088:
- mov r0, #0x0
- mvn r1, #0x0
- bl OS_FreeToHeap
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020910A0: .word 0x021C8C74
diff --git a/arm9/src/FUN_020910A4.c b/arm9/src/FUN_020910A4.c
index 850486d4..d1ee68b9 100644
--- a/arm9/src/FUN_020910A4.c
+++ b/arm9/src/FUN_020910A4.c
@@ -1,10 +1,32 @@
#include "global.h"
-void * (* gUnk021C8C70)(u32);
+typedef void * (* AllocFunc)(u32 size);
+typedef void (* FreeFunc)(void * ptr);
+AllocFunc gUnk021C8C70;
+FreeFunc gUnk021C8C74;
+
+// Custom allocator
ARM_FUNC void* FUN_020910A4(u32 size)
{
- if (gUnk021C8C70 != NULL)
- return gUnk021C8C70(size);
- return OS_AllocFromHeap(OS_ARENA_MAIN, -1, size);
+ if (gUnk021C8C70 != NULL)
+ return gUnk021C8C70(size);
+ else
+ return OS_AllocFromHeap(OS_ARENA_MAIN, -1, size);
+}
+
+// Custom destructor
+ARM_FUNC void FUN_0209105C(void * ptr)
+{
+ if (gUnk021C8C74 != NULL)
+ gUnk021C8C74(ptr);
+ else
+ OS_FreeToHeap(OS_ARENA_MAIN, -1, ptr);
+}
+
+// Custom alloc/free setter
+ARM_FUNC void SetCustomAllocator(AllocFunc allocator, FreeFunc destructor)
+{
+ gUnk021C8C70 = allocator;
+ gUnk021C8C74 = destructor;
}