diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-05-12 18:23:21 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-05-12 18:23:21 -0400 |
commit | 61a7e3213a21aba6e946a0b6d4bd907bbfb21dde (patch) | |
tree | 0bcf58ef2ee30121eae2b11c026b49ee6d968b4e | |
parent | 1f1436119c04f510975d3729458d9218340beb9d (diff) |
Additional two funcs in FUN_020910A4
-rw-r--r-- | arm9/arm9.lcf | 1 | ||||
-rw-r--r-- | arm9/asm/unk_0208AC14.s | 34 | ||||
-rw-r--r-- | arm9/src/FUN_020910A4.c | 30 |
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; } |