diff options
author | Rémi Calixte <remicalixte.rmc@gmail.com> | 2021-03-18 17:55:41 +0100 |
---|---|---|
committer | Rémi Calixte <remicalixte.rmc@gmail.com> | 2021-03-18 17:55:41 +0100 |
commit | dc241048eeac3cb560f621658dafc107226722fd (patch) | |
tree | 0e426b8e2fa9381391b30239689a48113de1f076 | |
parent | 71f0b43f821292a1093a9c7bad752f5a04655df3 (diff) |
decomp FUN_020168D0 and FUN_02016944
-rw-r--r-- | arm9/asm/unk_020166C8.s | 95 | ||||
-rw-r--r-- | arm9/global.inc | 1 | ||||
-rw-r--r-- | arm9/src/unk_020166C8_c.c | 49 |
3 files changed, 50 insertions, 95 deletions
diff --git a/arm9/asm/unk_020166C8.s b/arm9/asm/unk_020166C8.s index a1caec42..d28d1166 100644 --- a/arm9/asm/unk_020166C8.s +++ b/arm9/asm/unk_020166C8.s @@ -5,101 +5,6 @@ .text - thumb_func_start FUN_020168D0 -FUN_020168D0: ; 0x020168D0 - push {r4, lr} - add r4, r0, #0x0 - bl OS_GetProcMode - cmp r0, #0x12 - bne _020168E0 - bl ErrorHandling -_020168E0: - ldr r0, _02016940 ; =UNK_021C4D28 - ldr r1, [r0, #0x0] - ldr r0, [r0, #0x10] - ldrb r0, [r0, r4] - lsl r0, r0, #0x2 - ldr r0, [r1, r0] - cmp r0, #0x0 - beq _0201693E - bl thunk_FUN_020adc8c - ldr r1, _02016940 ; =UNK_021C4D28 - ldr r0, [r1, #0x10] - ldrb r0, [r0, r4] - lsl r2, r0, #0x2 - ldr r0, [r1, #0x4] - ldr r1, [r1, #0x8] - ldr r0, [r0, r2] - ldr r1, [r1, r2] - cmp r0, #0x0 - beq _02016912 - cmp r1, #0x0 - beq _02016912 - bl FUN_020ADDF0 - b _02016916 -_02016912: - bl ErrorHandling -_02016916: - ldr r1, _02016940 ; =UNK_021C4D28 - mov r0, #0x0 - ldr r2, [r1, #0x10] - ldr r3, [r1, #0x0] - ldrb r2, [r2, r4] - lsl r2, r2, #0x2 - str r0, [r3, r2] - ldr r2, [r1, #0x10] - ldr r3, [r1, #0x4] - ldrb r2, [r2, r4] - lsl r2, r2, #0x2 - str r0, [r3, r2] - ldr r2, [r1, #0x10] - ldr r3, [r1, #0x8] - ldrb r2, [r2, r4] - lsl r2, r2, #0x2 - str r0, [r3, r2] - ldrh r2, [r1, #0x1a] - ldr r0, [r1, #0x10] - strb r2, [r0, r4] -_0201693E: - pop {r4, pc} - .balign 4 -_02016940: .word UNK_021C4D28 - - thumb_func_start FUN_02016944 -FUN_02016944: ; 0x02016944 - push {r3-r7, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - add r7, r2, #0x0 - add r6, r3, #0x0 - cmp r5, #0x0 - bne _02016956 - bl ErrorHandling -_02016956: - bl OS_DisableInterrupts - add r4, #0x10 - str r0, [sp, #0x0] - add r0, r5, #0x0 - add r1, r4, #0x0 - add r2, r7, #0x0 - bl tempName_NNS_FndAllocFromExpHeapEx - add r4, r0, #0x0 - ldr r0, [sp, #0x0] - bl OS_RestoreInterrupts - cmp r4, #0x0 - beq _02016984 - ldr r1, [r4, #0xc] - mov r0, #0xff - bic r1, r0 - lsl r0, r6, #0x18 - lsr r0, r0, #0x18 - orr r0, r1 - str r0, [r4, #0xc] - add r4, #0x10 -_02016984: - add r0, r4, #0x0 - pop {r3-r7, pc} - thumb_func_start FUN_02016988 FUN_02016988: ; 0x02016988 push {r3, lr} diff --git a/arm9/global.inc b/arm9/global.inc index 28515dd6..e30ba1c5 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -8521,3 +8521,4 @@ .extern CountAlivePokemon .extern UNK_021C4D28 .extern FUN_020167F4 +.extern FUN_02016944
\ No newline at end of file diff --git a/arm9/src/unk_020166C8_c.c b/arm9/src/unk_020166C8_c.c index 00640ec1..36428a59 100644 --- a/arm9/src/unk_020166C8_c.c +++ b/arm9/src/unk_020166C8_c.c @@ -18,6 +18,8 @@ struct UnkStruct_020166C8 UNK_021C4D28; extern void *tempName_NNS_FndCreateExpHeapEx(void *param0, u32 param1, u32 param2); extern void *tempName_NNS_FndAllocFromExpHeapEx(void *param0, u32 param1, s32 param2); u32 FUN_02016834(u32 param0, u32 param1, u32 param2, s32 param3); +extern void thunk_FUN_020adc8c(); +extern void FUN_020ADDF0(u32 param0, void *param1); THUMB_FUNC void FUN_020166C8(u32 *param0, u32 param1, u32 param2, u32 pre_size) { @@ -191,4 +193,51 @@ THUMB_FUNC u32 FUN_02016834(u32 param0, u32 param1, u32 param2, s32 param3) ErrorHandling(); } return 0; +} + + +THUMB_FUNC void FUN_020168D0(u32 param0) { + if (OS_GetProcMode() == OS_PROCMODE_IRQ) { + ErrorHandling(); + } + + if (UNK_021C4D28.unk_ptr1[UNK_021C4D28.unk_ptr5[param0]] != 0) { + thunk_FUN_020adc8c(); + + u8 index = UNK_021C4D28.unk_ptr5[param0]; + u32 arg1 = UNK_021C4D28.unk_ptr2[index]; + void *arg2 = UNK_021C4D28.unk_ptr3[index]; + if (arg1 != 0 && arg2 != 0) { + FUN_020ADDF0(arg1, arg2); + } else { + ErrorHandling(); + } + + + + UNK_021C4D28.unk_ptr1[UNK_021C4D28.unk_ptr5[param0]] = 0; + UNK_021C4D28.unk_ptr2[UNK_021C4D28.unk_ptr5[param0]] = 0; + UNK_021C4D28.unk_ptr3[UNK_021C4D28.unk_ptr5[param0]] = 0; + + UNK_021C4D28.unk_ptr5[param0] = UNK_021C4D28.unk_half4; + } +} + + +THUMB_FUNC u32 FUN_02016944(void *param0, u32 param1, u32 param2, u8 param3) { + if (param0 == 0) { + ErrorHandling(); + } + OSIntrMode os_mode = OS_DisableInterrupts(); + param1+=16; + u32 *ptr = (u32 *) tempName_NNS_FndAllocFromExpHeapEx(param0, param1, param2); + + OS_RestoreInterrupts(os_mode); + if (ptr != 0) { + ptr[3] = (ptr[3] & ~0xff) | (param3 & 0xff); + + ptr+=4; + } + + return ptr; }
\ No newline at end of file |